Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DBGrid: TitleClick Problem (https://www.delphipraxis.net/156450-dbgrid-titleclick-problem.html)

dinosaur 2. Dez 2010 12:36

Delphi-Version: 2010

DBGrid: TitleClick Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
In unseren DBGrids gibt es in bestimmten spalten eine Auswahlmöglichkeit: Durch Doppelklick auf das Feld wird ein modales Fenster geöffnet in welchem der gewünschte Eintrag gesucht und ausgewählt werden kann. Mit einem Doppelklick auf dem gewünschten Eintrag wird das Fenster geschlossen. nun Haben wird aber ein interessantes Phänomen festgestellt: Wenn beim Doppelklick im PopupFenster der Cursor per zufall genau an der Position der Spaltenheader des darunterliegenden DBGrids ist, so wird der EventTitleClick ausgelöst..

Was ich genau meine sieht man wenn man das demoprojekt im Anhang ausführt (Auf Button klicken und auf der erscheinenden Form Doppelklicken)

Hat einer eine Idee wie man dieses Verhalten unterbinden könnte?

haentschman 2. Dez 2010 15:35

AW: DBGrid: TitleClick Problem
 
Hallo...
eine Lösung dafür gibt es nicht. Das Problem ist bekannt. Der Effekt tritt auch bei modalen Fenstern auf, nicht nur bei PopUp´s.
Workaround: das Popup immer relativ zum darunter liegendem Fenster öffen so daß es immer aus der Schußweite des Titels liegt. Wenn ein User dann das Popupn / Fenster über den Titel verfrachtet ist das einfach Pech :zwinker:

dinosaur 31. Jan 2011 14:25

AW: DBGrid: TitleClick Problem
 
noch ne kurze Rückmeldung mit der Lösung.. evtl. stört dieses Problem ja noch jemanden anderen :)

Delphi-Quellcode:
TMyGrid = class(TDBGrid)
private
  FMouseWasDown: Boolean;
  FColumnMoved: Boolean;
protected
  procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  procedure ColumnMoved(FromIndex, ToIndex: Longint); override;
  procedure TitleClick(Column: TColumn); override;
end;

procedure TMyGrid.ColumnMoved(FromIndex, ToIndex: Integer);
begin
  FColumnMoved := True;
  inherited;
end;

procedure TMyGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   FMouseWasDown := true;
   FColumnMoved := false;
   inherited;
end;

procedure TMyGrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   try
      inherited;
   finally
      FMouseWasDown := false;
   end;
end;

procedure TMyGrid.TitleClick(Column: TColumn);
begin
   if FMouseWasDown and (not FColumnMoved) then
   begin
      inherited;
   end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz