AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelklick in TStringGrid

Ein Thema von Hobby-Programmierer · begonnen am 28. Jan 2006 · letzter Beitrag vom 2. Feb 2012
Antwort Antwort
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#1

Doppelklick in TStringGrid

  Alt 28. Jan 2006, 00:16
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:
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;
bringt aber nur -1
Selbst GridCoord bringt keine Ergebnisse.

Hoffe das jemand Hilfe oder Vorschläge für mich hat.
Gruss Mario
Mario
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#2

Re: Doppeklick in TStringGrid

  Alt 28. Jan 2006, 00:22
Hallo,

schau Dir mal ScreenToClient an, oder war es ClientToScreen (ist schon spät)
damit kannst Du die Mauskoordinaten umrechnen.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#3

Re: Doppeklick in TStringGrid

  Alt 28. Jan 2006, 01:13
Super hat geholfen auch wenns schon Spät ist
für alle die es interessiert:
Delphi-Quellcode:
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;
Gruss Mario
Mario
  Mit Zitat antworten Zitat
Parre1950

Registriert seit: 6. Jun 2010
3 Beiträge
 
#4

AW: Doppelklick in TStringGrid

  Alt 2. Feb 2012, 17:24
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Doppelklick in TStringGrid

  Alt 2. Feb 2012, 17:37
Kann man Ihnen mal was Gutes tun?
(wir produzieren alkoholische Getränke)

Kann ich Dir (Anrede Du ist hier im Forum üblich) mal was Gutes tun?
Ich bin Fan von alkoholischen Getränken!
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#6

AW: Doppelklick in TStringGrid

  Alt 2. Feb 2012, 19:43
...wie wäre es denn mit einem vollen Bierlaster zu den nächsten Delphitagen ? Oder macht ihr was härteres ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

AW: Doppelklick in TStringGrid

  Alt 2. Feb 2012, 19:45
Was? Bier? Wo? *Hechel*
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.070 Beiträge
 
Delphi 12 Athens
 
#8

AW: Doppelklick in TStringGrid

  Alt 2. Feb 2012, 20:22
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 Delphi-Referenz durchsuchenTMouse.CursorPos / MSDN-Library durchsuchenGetCursorPos ist, daß diese Position nicht wirklich die Klickposition zurückgeben muß.
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 MSDN-Library durchsuchenGetMessagePos und MSDN-Library durchsuchenGetMessageTime könnte man, innerhalb der ButtonClick-Methode, eventuell nachträglich an die Informationen rankommen, welche z.B. von MSDN-Library durchsuchenWM_LBUTTONDBLCLK eigentlich geliefert werden.


[edit2]
Delphi-Quellcode:
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;
Und nun nur noch einen Timer auf die Form, z.B. mit Sleep(750); bei einem Interval von 1000. (oder besser noch länger)
Wenn man jetzt doppelt klickt und dannach die Maus schnell wegbewegt, dann ..........
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Feb 2012 um 20:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz