![]() |
Stringgrid: Scroll-Focus entfernen
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Tag,
Ich möchte im Stringgrid eine Zelle komplett "Deselektieren".
Code:
Führt leider nicht zum gewünschten Erfolg. Dieser entfernt nur die "Markierung", die Zelle ist aber immer noch selektiert (Bild).
StringGrid1.Selection := NoSelection ;
Da das StringGrid kein "OnCellClick" Event verfügt muss ich das "SelectCell" Event verwenden. Sobald nun aber der user im Grid scrollt wird nun mein "SelectCell" Event ausgelöst was nicht passieren darf. Im Prinzip muss sich die letzte Coloum wie eine Checkbox verhalten. Wenn man Klickt wird der Wert darin verändert. Aber nicht beim Scrollen.
Delphi-Quellcode:
Wie lässt sich dies bewerkstelligen ?
procedure TfrmCSV.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
const NoSelection : TGridRect = (Left: -1; Top: -1; Right: -1; Bottom: -1); begin if ACol = StringGrid1.ColCount-1 then begin if StringGrid1.Cells[ACol,ARow] = 'Nein' then begin StringGrid1.Cells[ACol,ARow] := 'Ja'; end else begin StringGrid1.Cells[ACol,ARow] := 'Nein'; end; end; StringGrid1.Selection := NoSelection ; end; Mfg Int3g3r |
AW: Stringgrid: Scroll-Focus entfernen
Hallo,
fang doch erst mal vorn an. Zitat:
Es gibt ja KeyDown und MouseDown bzw. -Up. Dieser Murks mit dem Mißbrauchen des SelectCell habe ich manchmal auch, das gibt bei mir immer Ärger. |
AW: Stringgrid: Scroll-Focus entfernen
Zitat:
Also beim klicken auf die Zelle soll darin "Ja" eingetragen werden. Beim erneuten klicken soll "Nein" eingetragen werden. Wie du oben siehst brauche ich irgendwoher die Information welche Zelle angeklickt wurde um das "Ja/Nein" in die richtige Zelle einzutragen. Das wäre schon alles. EDIT: Habe ne Lösung gefunden durch deinen Tipp. Ich wusste nicht das eine procedure existiert die X,Y Koordinaten in eine Col/Row umwandeln kann.
Code:
Kann mir jemand erklären wie man folgendes Konstrukt nennt ?
StringGrid1.MouseToCell(X,Y, Col,Row);
Code:
Dies ist doch im prinzip eine procedure die mehrere Werte zurückgibt, oder nicht ?
procedure MouseToCell(X: Integer; Y: Integer; var ACol: Longint; var ARow: Longint);
1. ) Eine Procedure hat per definition keinen Rückgabewert 2. ) Eine Funktion hingegen hat nur einen Rückgabewert. Dies irritiert mich ein wenig. Besten Dank! Int3g3r |
AW: Stringgrid: Scroll-Focus entfernen
Hallo,
eine Prozedur hat keinen Rückgabewert, kann aber Rückgabeparameter (Referenzparameter) haben. function Foo1(S: String): Integer; S: Parameter : Integer = Rückgabewert der Funktion procedure Proc1(S: String); S: Parameter procedure Proc2(S: String; var X: Integer); S: Parameter - Wertparameter X: Parameter - Referenzparameter Wird X in der Prozedur verändert, ändert sich auch der Wert der Variable das Aufrufers procedure Proc2(S: String; var X: Integer; Y: Integer); S: Parameter X: Parameter Y: Parameter = Referenzparameter Wird X in der Prozedur verändert, ändert sich auch die Variable das Aufrufers Wird Y in der Prozedur verändert, ändert sich die Variable das Aufrufers NICHT Das var kann man sich wie einen Pointer (eine Referenz) auf die eigentliche Variable beim Aufrufer vorstellen, der an die Prozedur übergeben wird. ![]() |
AW: Stringgrid: Scroll-Focus entfernen
Zitat:
Die "var x" existiert dort wo sie aufgerufen wird:
Delphi-Quellcode:
Somit wird beim aufruf eine druch die Variable "X" eine Referenz auf Zahl1 mitgegeben ?
procedure btnCSVClick(Sender: TObject);
var Zahl1: integer; begin proc2(test, zahl1, zahl2 ); end; Wäre dann folgendes zulässig ?
Delphi-Quellcode:
Danke für die Hilfe,
procedure btnCSVClick(Sender: TObject);
var Zahl1: integer; X: integer; //X wird ja bereits in der proc2 als variable verwendet begin proc2(test, zahl1, zahl2 ); end; Int3g3r |
AW: Stringgrid: Scroll-Focus entfernen
Hallo,
nein, ist nicht richtig.
Delphi-Quellcode:
Aber nu kommst !
procedure proc2(s: String; var x: Integer);
begin if s='' then begin // diverser Code1 x:= 1; end else begin // diverser Code2 x:= 2; end; end; procedure proc1; var s: String; x: Integer; begin s:= 'Test'; x:= 10; proc2(s,x); x ist ? -> 2, weil in proc2 ja steht // diverser Code2 x:= 2; s:= ''; proc2(s,x); x ist ? -> 1, weil in proc2 ja steht // diverser Code1 x:= 1; end;
Delphi-Quellcode:
Die in proc1 definierte Variable x hat nichts mit dem Parameter x in proc2 zu tun!
procedure proc2(Max: String; var Moritz: Integer);
begin if Max='' then begin // diverser Code1 Moritz:= 1; end else begin // diverser Code2 Moritz:= 2; end; end; procedure proc1; var s: String; x: Integer; begin s:= 'Test'; x:= 10; proc2(s,x); x ist ? -> 2, weil in proc2 ja steht // diverser Code2 Moritz:= 2; s:= ''; proc2(s,x); x ist ? -> 1, weil in proc2 ja steht // diverser Code1 Moritz:= 1; end; Das war im Bsp. 1 einer Zufall. OK, war Absicht ;) In den Delphi-Quellen wird deshalb bei Parameter immer ein A vorangestellt (ARow). Das dient einer besseren optischen Unterscheidung zwischen Parametern und Variablen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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