![]() |
[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; |
Re: CheckBox in Stringgrid
Hallo,
mal eine Frage dazu, spendierst Du jeder betreffenden Zelle eine eigene CheckBox? |
Re: CheckBox in Stringgrid
moin hansa,
wie wäre es mit der Suche :mrgreen: CheckBox im Stringgrid .... gibt es genau einem Eintrag :shock: raik |
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. |
Re: CheckBox in Stringgrid
|
Re: CheckBox in Stringgrid
Hallo,
Zitat:
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 |
Re: CheckBox in Stringgrid
Oh je. Das wird noch komplizierter. Habe das jetzt so gemacht :
Delphi-Quellcode:
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:
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); |
Re: CheckBox in Stringgrid
Hallo
vielleicht hilft dir ja das weiter : ![]() Das ist zwar eine ComboBox in einer StringGrid, aber das kann man ja umbauen. |
Re: CheckBox in Stringgrid
und noch einer
![]() |
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:
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)
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 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 by Thomas Breitkreuz