Anonymous | Login | Signup for a new account | 2018-04-25 21:59 CEST |
Main | My View | View Issues | Change Log | Roadmap | Docs |
Viewing Issue Simple Details [ Jump to Notes ] | [ View Advanced ] [ Issue History ] [ Print ] | ||||||
ID | Category | Severity | Reproducibility | Date Submitted | Last Update | ||
0006474 | [JEDI VCL] 00 JVCL Components | major | always | 2015-11-30 17:08 | 2016-08-04 19:37 | ||
Reporter | RalfNegt | View Status | public | ||||
Assigned To | AHUser | ||||||
Priority | normal | Resolution | fixed | ||||
Status | resolved | Product Version | 3.48 | ||||
Summary | 0006474: JvDBGrid OnMouseDown won't be called | ||||||
Description |
Actually i cannot start a drag action with an OnMouseDown event handler. Have a look at the method "TJvDBGrid.MouseDown" below and especially the flag "InheritedCalled". There are three conditions setting the flag. The event OnMouseDown will only be called if the flag isn't set. When i assign an event handler i want it to be called. But here the component itself decides whether or not to do so. Please remove the flag "InheritedCalled". By the way the variable "MouseDownEvent" is unnecessary. It can be replace by "OnMouseDown". procedure TJvDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ... MouseDownEvent: TMouseEvent; ... InheritedCalled: Boolean; begin ... InheritedCalled := False; ... if dgIndicator in Options then begin inherited MouseDown(Button, Shift, 1, Y); InheritedCalled := True; end ... if (dgRowSelect in Options) and (Cell.Y >= TitleOffset) then begin // Why do we always have to work around the VCL. If we use the original X the // Grid will scroll back to the first column. But if we don't use the original X // and goRowSizing is enabled, the user can start resizing rows in the wild. WasRowResizing := goRowSizing in TCustomGridAccess(Self).Options; try // Disable goRowSizing without all the code that SetOptions executes. TGridOptions(Pointer(@TCustomGridAccess(Self).Options)^) := TCustomGridAccess(Self).Options - [goRowSizing]; inherited MouseDown(Button, Shift, 1, Y); InheritedCalled := True; finally if WasRowResizing then TGridOptions(Pointer(@TCustomGridAccess(Self).Options)^) := TCustomGridAccess(Self).Options + [goRowSizing]; end; end else begin inherited MouseDown(Button, Shift, X, Y); InheritedCalled := True; end; ... MouseDownEvent := OnMouseDown; if Assigned(MouseDownEvent) and not InheritedCalled then MouseDownEvent(Self, Button, Shift, X, Y); ... end; |
||||||
Additional Information | |||||||
Tags | No tags attached. | ||||||
Attached Files |
![]() |
||||||
|
![]() |
|
(0021283) dougwoodrow (reporter) 2016-04-11 11:37 |
This appears to have been introduced by an attempt to fix a situation with OnMouseDown being called twice. see commit by obones Dec 16 2013 "Mantis 5915: Do not call OnMouseDown twice" https://github.com/project-jedi/jvcl/commit/b6b42daa3350c35ccf0040bd8201c40edd58d28b [^] |
(0021284) dougwoodrow (reporter) 2016-04-11 12:09 |
This bug results in the OnMouseDown event not being called when the mouse is over a data record, it is called when the mouse is over the title buttons or outside the data records. |
(0021285) dougwoodrow (reporter) 2016-04-12 11:07 |
I've attached a sample Delphi 7 application (copied from Mantis 5915) to demonstrate the problem. Note that with RalfNegt's proposed solution the TJvUltimGrid still has problems, but TJvDBGrid seems ok. http://issuetracker.delphi-jedi.org/view.php?id=5915 [^] |
(0021286) dougwoodrow (reporter) 2016-04-12 11:30 |
(Sorry, please remove mad* from Project1.dpr). Note also this problem is still present in JVCL version 3.49. |
(0021328) AHUser (developer) 2016-08-04 19:37 |
Fixed in master branch. OnMouseDown is now called even if there was a call to "inherited MouseDown" that didn't call "TControl.MouseDown". I also added a OnBeforeMouseDown and OnAfterMouseDown event, so you also get notified if the user clicks on a header cell. |
Mantis 1.1.6[^] Copyright © 2000 - 2008 Mantis Group |