![]() |
TStringGrid -[goRowSelect] wird nicht visualisiert
Hallo,
folgender Code schaltet goRowSelect ein oder aus (per CheckBox). Problem: wird RowSelect eingeschaltet, wird brav die ganze Zeile markiert, wird es ausgeschaltet, bliebt die Zeile markiert, bis man in eine Zelle klickt. Danach ist nur diese eine Zelle markiert, wie erwartet. BeginUpdate/EndUpdate, Refresh, Repaint, nichts hilft. Das sollte für das TMS-TAdvStringGrid sein, aber auch das normale TStringGrid reagiert so. Hat jemand eine Lösung? Danke
Delphi-Quellcode:
if CheckBox1.Checked then
begin AdvStringGrid1.Options := AdvStringGrid1.Options-[goRowSelect]; StringGrid1.Options := StringGrid1.Options-[goRowSelect]; end else begin AdvStringGrid1.Options := AdvStringGrid1.Options+[goRowSelect]; StringGrid1.Options := StringGrid1.Options+[goRowSelect]; end; |
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Ergänze nach dem Click einfach wie folgt:
Delphi-Quellcode:
Das funktioniert sowohl mit dem StringGrid als auch mit dem TMS-AdvStringGrid
for L := AdvStringGrid1.ColCount-1 downto AdvStringGrid1.FixedCols
do AdvStringGrid1.Col := L; |
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Hallo,
geht das in Deine Richtung?
Delphi-Quellcode:
Gruß
procedure TForm1.SetRowSelect (const Value : Boolean; const Grid : TDrawGrid);
var l, t : Integer; begin l := Grid.Col; t := Grid.Row; Grid.Selection := TGridRect (Rect (l, t, l, t)); if Value then Grid.Options := Grid.Options + [goRowSelect] else Grid.Options := Grid.Options - [goRowSelect] end; procedure TForm1.CheckBox1Click(Sender: TObject); begin SetRowSelect (CheckBox1.Checked, StringGrid1); SetRowSelect (CheckBox1.Checked, AdvStringGrid1); end; [EDIT]Kein roter Kasten[/EDIT] |
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Zitat:
Delphi-Quellcode:
reichen?
AdvStringGrid1.Col := AdvStringGrid1.FixedCols
Da FixedCols ja die Anzahl der fixierten Spalten ist, würde diese Zahl als Index verwendet immer die erste Zelle innerhalb der Zeile selektieren. Warum erst von größten Spalte runterzählen? |
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Weil col eine Property ist, bei deren Zuweisung noch andere Dinge passieren (z.B. eben markieren/Markierung löschen, wie hier gefragt - falls die Lösung so funktioniert :) )
|
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Zitat:
|
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Hallo,
der Code von Harry klappt, danke! Das hier klappt nicht, warum auch immer. AdvStringGrid1.Col := AdvStringGrid1.FixedCols Heiko |
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Zitat:
|
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Okay, das so nicht ganz korrekt.
col:= selectiert die Column wohl nur, wenn diese nicht bereits selectiert ist (was aber bei der Option goRowSelect bereit der fall ist). Darum funktioniert das auch nicht, wenn man goRowSelect wieder auf False setzt, weil sich die Selection dabei nicht verändert, also alle Zellen der Row noch selektiert bleiben. Ist aber vorher nur eine Zelle selektiert, selektiert col:= diese sofort. Richtig (oder richtiger) wäre dann aber
Delphi-Quellcode:
womit eben die erste Zelle der aktuellen Zeile selektiert wäre.
strngrd1.Selection:=TGridRect(Rect(strngrd1.FixedCols,strngrd1.Row,strngrd1.FixedCols,strngrd1.Row));
Kommt zwar am Ende das gleich bei raus, aber man muss nicht jeder Zelle der Zeile rückwärts selektieren. |
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Zitat:
Zitat:
Möglicherweise würde auch ein grid.invalidate helfen, mit dem Neuzeichnen nach Veränderungen ist das Stringgrid generell recht zurückhaltend. |
AW: TStringGrid -[goRowSelect] wird nicht visualisiert
Zitat:
Denn
Delphi-Quellcode:
führt dazu, das nach wie vor alle Zellen der Zeile selektiert sind. Lediglich die Darstellung verändert sich ein wenig. Während bei einem goRowSelect alle Zellen mit 1 gemeinsamen Rahmen versehen sind, nach diesen beiden Zeilen alle Zellen mit einem eigenen Rahmen versehen. Sind aber noch alle markiert.
strngrd1.Options:=strngrd1.Options-[goRowSelect];
strngrd1.Col:=1; Zitat:
Hier, mach dir mal ne Form mit einen StringGrid und 4 Buttons und probier das mal aus.
Delphi-Quellcode:
Du wirst feststellen, dass beim Klick auf btn1 außer der visuellen Veränderung, wie ich oben geschrieben habe, nicht viel passiert. Auch nicht, wenn man noch mal drauf klickt. Erst wenn man danach mal auf btn2 klickt, wird tatsächlich die 2 Zelle auch selektiert.
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids; type TForm1 = class(TForm) strngrd1: TStringGrid; btn1: TButton; btn2: TButton; btn3: TButton; btn4: TButton; procedure btn4Click(Sender: TObject); procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); procedure btn3Click(Sender: TObject); procedure FormShow(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); begin strngrd1.Options:=strngrd1.Options-[goRowSelect]; strngrd1.Col:=1; end; procedure TForm1.btn2Click(Sender: TObject); begin strngrd1.Options:=strngrd1.Options-[goRowSelect]; strngrd1.Col:=2; end; procedure TForm1.btn3Click(Sender: TObject); begin strngrd1.Options:=strngrd1.Options-[goRowSelect]; strngrd1.Col:=3; strngrd1.Selection:=TGridRect(Rect(strngrd1.FixedCols,strngrd1.Row,strngrd1.FixedCols,strngrd1.Row)); end; procedure TForm1.btn4Click(Sender: TObject); begin strngrd1.Options:=strngrd1.Options+[goRowSelect]; end; procedure TForm1.FormShow(Sender: TObject); begin btn4Click(self); end; end. Wohingegen ein klick auf btn3 immer funktioniert. btn4 selektiert dann wieder die ganze Zeile. PS: Die visuelle Veränderung, die ich oben erwähne, kann aber bei einer anderen OS- oder Delphiversion möglichweise sich anders darstellen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 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