![]() |
Doppelklick in TStringGrid
Moin :) ...,
wie kann ich in einem StringGrid einen Doppelklick abfangen und auswerten? Im Moment stehe ich ziemlich auf dem Schlauch und weiss nimmer weiter :? Folgendes habe ich probiert
Delphi-Quellcode:
bringt aber nur -1 :(
procedure TForm_Jahresanzeige.JahresGridDblClick(Sender: TObject);
var P: TPoint; aCol, aRow: Integer; begin GetCursorPos(P); JahresGrid.MouseToCell(P.X, P.Y, aCol, aRow); ShowMessage(inttostr(aCol)+':'+ inttostr(aRow)); end; Selbst GridCoord bringt keine Ergebnisse. Hoffe das jemand Hilfe oder Vorschläge für mich hat. Gruss Mario :dancer: |
Re: Doppeklick in TStringGrid
Hallo,
schau Dir mal ScreenToClient an, oder war es ClientToScreen :gruebel: (ist schon spät) damit kannst Du die Mauskoordinaten umrechnen. |
Re: Doppeklick in TStringGrid
:thumb: Super hat geholfen auch wenns schon Spät ist :lol:
für alle die es interessiert:
Delphi-Quellcode:
Gruss Mario :dancer:
var
MousePos: TPoint; iCol, iRow: integer; begin MousePos:= StringGrid.ScreenToClient(Mouse.CursorPos); Stringgrid.MouseToCell(MousePos.X, MousePos.Y, iCol, iRow); ShowMessage(IntToStr(iCol)+ ':'+ IntToStr(iRow)); end; |
AW: Doppelklick in TStringGrid
Sie sind ein Engel!
Wie lange tüfftel ich schon daran herum. Danke Kann man Ihnen mal was Gutes tun? (wir produzieren alkoholische Getränke) MfG Dr. Robert Bauer |
AW: Doppelklick in TStringGrid
Zitat:
Kann ich Dir (Anrede Du ist hier im Forum üblich) mal was Gutes tun? Ich bin Fan von alkoholischen Getränken! :-D |
AW: Doppelklick in TStringGrid
...wie wäre es denn mit einem vollen Bierlaster zu den nächsten Delphitagen ? :stupid: Oder macht ihr was härteres ?
|
AW: Doppelklick in TStringGrid
Was? Bier? Wo? *Hechel* :mrgreen: :cheers:
|
AW: Doppelklick in TStringGrid
Wobei die Button-Click- und DoubleClick-Ereignisse eigentlich die Mausposition direkt mitliefern, nur werden diese Information innerhalb der VCL nicht weitergereich.
Aber man könnte diese Ereignisse auch selber abfangen. Dafür müßte man aber die gewünschte Komponente ableiten oder sich an Application.OnMessage dranhängen (hier muß man aber auch noch die Message mit der Komponente in Verbindung bringen). Ein Nachteil an ![]() ![]() Denn zwischen dem Klick und dem Auslesen der Position kann durchaus etwas Zeit liegen, in welcher sich die MausPosition geändert haben könnte. Vorallem wenn die Anwendung oder der PC etwas ausgelastet ist. [edit] Ich hab es jetzt nicht ausprobiert, aber über ![]() ![]() ![]() [edit2]
Delphi-Quellcode:
Und nun nur noch einen Timer auf die Form, z.B. mit
type
TComponentButtonHelper = class helper for TObject{TControl} function GetEventMousePos: TPoint; function GetEventTimeOffset: Integer; end; function TComponentButtonHelper.GetEventMousePos: TPoint; var MousePos: DWORD; begin MousePos := GetMessagePos; Result.X := TSmallPoint(MousePos).x; Result.Y := TSmallPoint(MousePos).y; if Self is TControl then Result := TControl(Self).ScreenToClient(Result); end; function TComponentButtonHelper.GetEventTimeOffset: Integer; begin Result := Integer(GetTickCount) - GetMessageTime; end; procedure TForm1.Memo1DblClick(Sender: TObject); begin Memo1.Lines.Add(Format('X=%d, Y=%d, T=%d | X=%d, Y=%d', [ Sender.GetEventMousePos.X, Sender.GetEventMousePos.Y, Sender.GetEventTimeOffset, (Sender as TControl).ScreenToClient(Mouse.CursorPos).X, (Sender as TControl).ScreenToClient(Mouse.CursorPos).Y])); end;
Delphi-Quellcode:
bei einem Interval von 1000. (oder besser noch länger)
Sleep(750);
Wenn man jetzt doppelt klickt und dannach die Maus schnell wegbewegt, dann .......... |
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