Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Checkbox in Stringgrid (https://www.delphipraxis.net/185426-checkbox-stringgrid.html)

sephraina 9. Jun 2015 10:27

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: http://borland.newsgroups.archived.a...803046227.html übernommen.

Delphi-Quellcode:
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;
ok, es erscheint noch nichts auf meinem Stringgrid.
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

ibp 9. Jun 2015 10:49

AW: Checkbox in Stringgrid
 
du musst der CheckBox auch sagen wohin sie platziert werden soll.

lies mich!

sephraina 9. Jun 2015 12:15

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:
stringgrid1.Cells[5,i]:= 'mein String';
und so kann man ja auch auslesen ob
Delphi-Quellcode:
checked := true;
ist.
Da die Checkbox ja ein Objekt ist, geht das nicht so einfach... oder doch?

Captnemo 9. Jun 2015 14:06

AW: Checkbox in Stringgrid
 
Ich würde mir eine neue Checkbox ableiten, wo ich dann auch col / row hinterlegen kann.
Delphi-Quellcode:
type
  TInlineCheckBox=class(TCheckBox)
  public
    Grid: TStringGrid;
    Col: Integer;
    Row: Integer;
  end;
Im OnClick kann man dann mit
Delphi-Quellcode:
TInlineCheckBox(Sender).Col
TInlineCheckBox(Sender).Row
gleich ermitteln, welche Zelle in welchem Grid (wenn man dann mehrere hätte) angeklickt wurde

Hansa 9. Jun 2015 14:46

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:
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;
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:

sephraina 9. Jun 2015 16:36

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 12:54 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