![]() |
Checkbox in Stringgrid
Hallo Zusammen,
ich weiss zu diesem Thema gibts schon einiges, aber ich hab da was aus dem Internet ausporbiert, das bei mir nicht so funktioniert wie es sollte. Vielleicht sieht jemand gleich den Fehler... (hoffentlich..) Ich will eine Checkbox in jede Zeile in einer bestimmten Spalte einfügen in einem Stringgrid. Diesen Code habe ich +/- aus: ![]()
Delphi-Quellcode:
ok, es erscheint noch nichts auf meinem Stringgrid.
procedure TForm2.InseretCheckBoxes(var Stringgrid1: TStringGrid);
var ChkBox : TCheckBox; i : Integer; begin with Stringgrid1 do begin for i := 1 to 3 do //einfach ein paar Zeilen begin Cells[5, i] := EmptyStr; ChkBox := TCheckBox.Create(Stringgrid1); with ChkBox do begin //Name := Format('ChkBox_%d_%d', [3, i]); //Caption := EmptyStr; Checked := False; Visible := True; Parent := Stringgrid1; Width := Height; end; Objects[5,i] := ChkBox; end; end; end; Dann fülle ich das Grid mit Daten und rufe am Ende noch diese Prozedur auf (Form2.InsertCheckboxes). Endlich sehe ich eine Checkbox, leider aber nur im oberen linken Feld meines Stringgrids und nicht in der Spalte wo ich die chboxes wollte... :( Hat jemand eine Idee woran das liegt? Gruss und Danke sephraina |
AW: Checkbox in Stringgrid
|
AW: Checkbox in Stringgrid
Hallo,
danke für die schnelle Antwort. Ja diesen Beitrag habe ich schon gesehen... Ich will aber die Checkbox nicht so umständlich draufzeichnen... Geht das nicht einfacher? Irgendwie muss ich doch nur noch der Checkbox sagen wo sie hin soll. Normalerweise (also bei einem String) verwende ich dafür :
Delphi-Quellcode:
und so kann man ja auch auslesen ob
stringgrid1.Cells[5,i]:= 'mein String';
Delphi-Quellcode:
ist.
checked := true;
Da die Checkbox ja ein Objekt ist, geht das nicht so einfach... oder doch? |
AW: Checkbox in Stringgrid
Ich würde mir eine neue Checkbox ableiten, wo ich dann auch col / row hinterlegen kann.
Delphi-Quellcode:
Im OnClick kann man dann mit
type
TInlineCheckBox=class(TCheckBox) public Grid: TStringGrid; Col: Integer; Row: Integer; end;
Delphi-Quellcode:
gleich ermitteln, welche Zelle in welchem Grid (wenn man dann mehrere hätte) angeklickt wurde
TInlineCheckBox(Sender).Col
TInlineCheckBox(Sender).Row |
AW: Checkbox in Stringgrid
Was ist denn in dem verlinkten Beitrag zumindest von mir zu umständlich ? Das sind ganze ca. 10 Zeilen :shock: Du verstehst wahrscheinlich den Trick nicht, der hinter meinem Beispiel steckt : in der Stringgrid-Zelle, die eventuell eine gecheckte oder ungecheckte Checkbox enthalten soll, da steht in Wahrheit eine Zahl drin, z.B. 0 oder 1. Abhängig von diesem Stringgrid Zelleninhalt wird dann dieser im Ondrawcell ausgewertet und eben die Checkbox gezeichnet oder auch gechecked oder eben nicht. Deshalb braucht man da 3 Werte. Bei mir 0,1,2. Für unsichtbar, sichtbar aber unchecked und sichtbar und checked.
Vielleicht hätte ich in dem alten Beitrag noch den Prozedur-Kopf angeben sollen. Der sieht so aus :
Delphi-Quellcode:
Es geht also lediglich darum, die entsprechenden Stringgrid-Zellen mit 0,1 oder 2 zu bestücken und sich das OnDrawCell zurechtzubauen. Im konkreten Fall hier musst du den Kopf hier verwenden, wegen der Konstantendeklaration und aus dem alten Beitrag den Code. Und fertig. :mrgreen:
procedure Tfrm.sgArtNrDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); const IsChecked : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); var sgSender : TStringGrid; |
AW: Checkbox in Stringgrid
Hallo,
danke für alle Antworten. @ Hansa: Habe mir heute Nachmittag den Beitrag nochmals angesehen und mich dann teilweise an den Code des "Hobby Programmierers" gehalten. So funktionierts recht ordentlich. Gruss und Danke. Sephraina |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 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