![]() |
Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
SORRY!:(
War lang nicht dabei, hab bisher irgendwo alles finden können, was ich brauchte. Aber, seit WOCHEN suche ich und finde nicht! In Stringgrid.MousDown erfahre ich die Maus-Koordinaten, aber ich benötige die Angabe Col,Row, um die Werte der jeweiligen Zeile auszulesen. Habe dies hier gefunden, aber beim Klick auf eine Zeile/Zelle zeigt mir die ListBox völlig falsche Werte an! BIN ABSOLUT DANKBAR für EURE HILFE!!! Folgender Befehl bezieht sich doch auf die gesamte Form, oder? p:=ScreenToClient(Point(x, y));
Delphi-Quellcode:
Col,Row Werte stimmen NICHT mit geklickter Zeile/Zelle überein!
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var p: TPoint; Col,Row: Integer; begin with StringGrid1 do// begin // L:=Left; // T:=Top; // p:= ScreenToClient(Point(x, y)); //StringGrid1.MouseToCell(p.x, p.y, Col, Row); // Alt HOHE FEHLER Quote StringGrid1.MouseToCell(p.x+L, p.y+T, Col, Row);// Neu geringe FEHLER Quote ListBox1.Items.Add('Col,Row='+IntToStr(Col)+','+IntToStr(Row)); PopUpMenu1.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y);// Das klappt end; Nachtrag, hab die x,y Werte von ScreenToClient etwas verändert, so wird Col,Row (fast)richtig angezeigt- StringGrid1ToClient nimmt Delhi nicht |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Hallo, ich gebe ein kleines Beispiel, lege dazu ein mousedown event an:
Delphi-Quellcode:
Viel spass
procedure TForm17.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin StringGrid1.MouseToCell(X, Y, ACol, ARow); // hier bekommt ACol und ARow ihre entsprechenden werte Edit1.Text := StringGrid1.Cells[ACol, ARow]; // hier lese ich die zelle aus end; |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Oder man nimmt das Event OnSelectCell.
|
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Hallo,
er will aber ein PopupMenu erstellen. Und das wahrscheinlich auf die rechte Maustaste. |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Zitat:
Zitat:
|
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Sorry, ich habe nur den Text gelesen und nicht den Source (der nicht mal compilieren würde).
Aber auch im Source steht nichts von rechter Maustaste. D.h.: Das PopUp wird auch bei linker Maustaste angezeigt. Und wenn ich schon am meckern bin: Bitte kein "with" im Source.:wink: |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Hallo,
das mit der rechten Maustaste hatte ich so im Gefühl ;) |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Zitat:
Genauer als Zitat:
|
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
OnSelect wird doch auch gefeuert wenn man mit Tastatur sich im Grid bewegt? (auf welche Zeile im Stringgrid geklickt wurde = maus event)
|
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Zitat:
Ein Programm, bei dem ich bestimmte Aktionen nur per Maus erreichen kann, benutze ich nicht. |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
ich möchte weder streiten noch recht bekommen deswegen verlasse ich dieses thema.
|
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Hi jumper63
Vielleicht hilft dir ja auch ![]() ![]() Zitat:
1. Du hast den werten p.x und p.y keine Inhalte zugewiesen (nicht initialisiert). Somit enthalten die beiden Zufallswerte. oder 2. Du hättest statt einer TPointstruktur auch X & Y direkt verwenden können. Gruss Delbor |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Zitat:
Zitat:
Wobei ScreenToClient eh falsch war, da X und Y garkeine Screen- sondern bereits Client-Koordinaten sind und da dann nochmal relative Client-Koordinaten (Left/Top, also Grid zu seinem Owner) dazuaddiert ... da kann ja nichts Sinnvolles bei raus kommen. Aber will MouseToCell nun Screen- oder Client-Koordinaten? Touchscreen ohne Tastatur ... och der Arme hat nichtmal ein Handy Und WARUM sind L und T globale Variablen? |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Hallo KodeZwerg!
MEGAVIELEN DANK! Klappt PERFEKT! |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Aber warum Bitte kein with im code??
Naja, bei nur 2 Zuweisungen unnötig. |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Hi jumper63
Zitat:
Fazit: ein 'with' spart nur scheinbar Tipparbeit, sorgt aber in vielen Fällen für mehr Arbeit andere Aert. Tipparbeit kann man sich auch per Drag&Drop sparen. Und meine Argumente sind bestimmt nicht die einzigen... Gruss Delbor |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
Beispiel TRect.
früher ging sowas wie
Delphi-Quellcode:
Um die Größe einer Form zu setzen (z.B. im OnCreate), und jetzt wunderst du dich, dass scheinbar garnichts mehr passiert, obwohl der Compiler sagt "alles OK", weil
with MyRect do begin
Width := Right - Left; Height := Bottom - Top;
Delphi-Quellcode:
dir zu lang war.
with MyRect do begin
Self.Width := Right - Left; Self.Height := Bottom - Top; // oder Self.Width := MyRect.Right - MyRect.Left; Self.Height := MyRect.Bottom - MyRect.Top; alt
Delphi-Quellcode:
neu (Auszug, weil knapp 100 Zeilen)
TRect = record
case Integer of 0: (Left, Top, Right, Bottom: FixedInt); 1: (TopLeft, BottomRight: TPoint); end;
Delphi-Quellcode:
TRect = record
private ... public ... property Width: Integer read GetWidth write SetWidth; property Height: Integer read GetHeight write SetHeight; case Integer of 0: (Left, Top, Right, Bottom: FixedInt); 1: (TopLeft, BottomRight: TPoint); end; seit 10.4 (10.3) darf man gern Inline-Variablen verwenden
Delphi-Quellcode:
wobei ich in diesem Fall eher "absolute" verwenden würde, wenn mir "MyRect" zu lang ist.
var R := MyRect; // mitten im Code, also "inline"
Width := R.Right - R.Left; Height := R.Bottom - R.Top;
Delphi-Quellcode:
Aber da ich faul bin, mach ich natürlich
var
R: TRect absolute MyRect; begin Width := R.Right - R.Left; Height := R.Bottom - R.Top;
Delphi-Quellcode:
Width := MyRect.Width;
Height := MyRect.Height; // oder Self.Width := MyRect.Width; Self.Height := MyRect.Height; |
AW: Wie erfahre ich, auf welche Zeile im Stringgrid geklickt wurde?
DANKE euch für die tollen Tipps!!!
Bin absolut LERNBEREIT! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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