Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: StringGrid-Komponente mit Checkbox

  Alt 3. Apr 2007, 20:27
Das ist nicht gantz trivial, aber es geht. Aber da gibts einige Tricks mehr. Zunächst mal muss der Stringgrid-Zelleninhalt gesetzt werden. Um eben erst unterscheiden zu können, ob die Box gechecked ist, oder nicht. Dieser Wert wird dann im OnDrawCell ausgewertet und je nach Lage wird zunächst dann ein Rechteck gezeichnet. Dieses Rechteck wird dann eben gecheckt oder nicht.

Delphi-Quellcode:
        if ACol in CheckBoxCols then begin
// 0 für Unchecked, 1 für checked, 2 für nur anzeigen
          if StrToInt (sgArtNr.Cells [ACol,ARow]) in [1,2] then begin
            InflateRect(Rect,-1,-1);
            DrawState := ISChecked[StrToInt (sgArtNr.Cells [ACol,ARow]) = 1];
// ^ die 0/1, die aus dem DB-Original in sgArtNr steht beeinflusst, ob die
// CheckBox gecheckt ist ! D.h. sie wird im OnDrawCell je nach Wert gezeichnet !
            sgArtNr.Canvas.FillRect(Rect);// hinter Cells lieg. 0/1/2, aber das soll man nicht sehen
            DrawFrameControl(sgArtNr.Canvas.Handle,Rect,DFC_BUTTON,DrawState);
          end
          else begin // Checkbox nicht anzeigen !!
            InflateRect(Rect,-1,-1);
            Canvas.FillRect(Rect);
          end;
Der Haupttrick ist der, dass die Stringgrid-Zelle tatsächlich nur aus 0/1/2 besteht, aber die Darstellung als CheckBox so geht. Und das wird quasi überschrieben. Aber nicht im Sinne von OOP, sondern es geht um den Bildschirm, bzw. die StringGrid-Zelle.
Gruß
Hansa
  Mit Zitat antworten Zitat