Delphi-PRAXiS
Seite 1 von 2  1 2      

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 [erledigt] CheckBox in Stringgrid (https://www.delphipraxis.net/60831-%5Berledigt%5D-checkbox-stringgrid.html)

Hansa 12. Jan 2006 21:30


[erledigt] CheckBox in Stringgrid
 
Hi,

ich habe in eine Spalte eines Stringgrids Checkboxen eingebaut. Im OnDrawCell übergebe ich hierzu die Koordinaten der Stringgrid Zellen (Rect) an die Checkboxen, damit sie genau reinpassen. Nun werden sie allerdings immer wieder neu gezeichnet => flackern. Allerdings habe ich in dem Grid ganz andere Sachen drin (in Abhängigkeit des Zellinhalts umfärben, rechtsbündige Darstellung bei Zahlen, Nachkommastellen usw.) und da flackert nichts. Was ist da falsch ?

Hier noch Teil vom OnDrawCell :
Delphi-Quellcode:
        if ACol in BoolCols then begin
          sgCheckBox.Left := Rect.Left + sg.Left + 2;
          sgCheckBox.Top := Rect.Top + sg.top + 2;
          sgCheckBox.Width := Rect.Right - Rect.Left;
          sgCheckBox.Height := Rect.Bottom - Rect.Top;
          sgCheckBox.Visible := True;

Lannes 12. Jan 2006 22:09

Re: CheckBox in Stringgrid
 
Hallo,

mal eine Frage dazu,
spendierst Du jeder betreffenden Zelle eine eigene CheckBox?

kiar 13. Jan 2006 00:07

Re: CheckBox in Stringgrid
 
moin hansa,

wie wäre es mit der Suche :mrgreen:

CheckBox im Stringgrid .... gibt es genau einem Eintrag :shock:

raik

Hansa 13. Jan 2006 00:10

Re: CheckBox in Stringgrid
 
Auf der Form ist eine einzige Checkbox. Und die wird allerdings immer wieder mit veränderten Koordinaten angezeigt.

@roter Kasten Schlaumeier :mrgreen: bei mir ist da nicht.

kiar 13. Jan 2006 00:16

Re: CheckBox in Stringgrid
 
http://www.delphipraxis.net/internal...box+stringgrid

Lannes 13. Jan 2006 07:12

Re: CheckBox in Stringgrid
 
Hallo,
Zitat:

Zitat von Hansa
Auf der Form ist eine einzige Checkbox. Und die wird allerdings immer wieder mit veränderten Koordinaten angezeigt.

dann muss das flackern.
Durch das Verschieben der CheckBox von einer Zelle in eine andere,
wird die Zelle aus der die Checkbox entfernt wurde auch neu gezeichnet,
das Zeichnen verschiebt die Checkbox dann wieder usw. usw.
Dein Code fordert für jede Zelle in der Spalte die Checkbox-Verschiebung,
daraus entsteht dann eine Endlosschleife, folglich flackert es.
Dein Code in OnDrawCell muss das behandeln.

PseudoCode:
Code:
if ACol in CheckBoxSpalte then
  if SollCheckBox then
    CheckBoxNachHierVerschieben
    else
      LeereZelleZeichnen

Hansa 13. Jan 2006 10:49

Re: CheckBox in Stringgrid
 
Oh je. Das wird noch komplizierter. Habe das jetzt so gemacht :
Delphi-Quellcode:
        if ACol in BoolCols then begin
          DrawRect:=Rect;
          InflateRect(DrawRect,-1,-1);
          DrawState := ISChecked[StrToInt (sg.Cells [ACol,ARow]) = 1];
          sg.Canvas.FillRect(Rect);
          DrawFrameControl(sgArtNr.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
Wenn ich das richtig dehe, dann sind die Checkboxen lediglich zu sehen und haben keine Funktion, oder ? Muß ich da jetzt noch mit MouseMove im SelectCell usw. hantieren ? :shock:

Helmi 13. Jan 2006 10:54

Re: CheckBox in Stringgrid
 
Hallo

vielleicht hilft dir ja das weiter :link.

Das ist zwar eine ComboBox in einer StringGrid, aber das kann man ja umbauen.

ibp 13. Jan 2006 11:30

Re: CheckBox in Stringgrid
 
und noch einer sdc der klappt sehr gut, du musst natürlich das control austauschen!

Hansa 13. Jan 2006 12:00

Re: CheckBox in Stringgrid
 
Das habe ich doch alles schon gesehen. :-D Die Checkbox ist anders ! Aber egal. Gezeichnet war sie ja vorher sowieso richtig. Habe es jetzt so gemacht :

Delphi-Quellcode:
procedure Tfrm.sgClick(Sender: TObject);
begin
  inherited;
  if sg.Col in BoolCols then begin
    if StrVorhanden (sg.Cells [sg.Col,sg.Row]) then begin
      if StrToInt (sg.Cells [sg.Col,sg.Row]) = 1 then
        sgr.Cells [sg.Col,sgArtNr.Row] := '0'
      else
        sg.Cells [sg.Col,sg.Row] := '1';
    end;
  end;
end;
Ist auch besser für nicht so zielsichere. Die brauchen dann nur die richtige Zelle zu treffen und nicht die CheckBox selber. :mrgreen: Tja, da sieht man mal wieder, wie man mit einem simplen Trick Delphi veranlaßt, genau das gewünschte zu machen. Und der Trick besteht darin, daß hinter der CheckBox in Wirklichkeit 1 oder 0 steht. 8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr.
Seite 1 von 2  1 2      

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