AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TStringGrid -[goRowSelect] wird nicht visualisiert

Ein Thema von hoika · begonnen am 26. Jun 2015 · letzter Beitrag vom 29. Jun 2015
Antwort Antwort
Seite 1 von 2  1 2   
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 26. Jun 2015, 17:34
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;
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 26. Jun 2015, 22:46
Ergänze nach dem Click einfach wie folgt:
Delphi-Quellcode:
 for L := AdvStringGrid1.ColCount-1 downto AdvStringGrid1.FixedCols
      do AdvStringGrid1.Col := L;
Das funktioniert sowohl mit dem StringGrid als auch mit dem TMS-AdvStringGrid
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#3

AW: TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 26. Jun 2015, 22:50
Hallo,

geht das in Deine Richtung?

Delphi-Quellcode:
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;
Gruß

[EDIT]Kein roter Kasten[/EDIT]
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#4

AW: TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 27. Jun 2015, 12:51
Ergänze nach dem Click einfach wie folgt:
Delphi-Quellcode:
 for L := AdvStringGrid1.ColCount-1 downto AdvStringGrid1.FixedCols
      do AdvStringGrid1.Col := L;
Das funktioniert sowohl mit dem StringGrid als auch mit dem TMS-AdvStringGrid
Würde da nicht einfach nur
AdvStringGrid1.Col := AdvStringGrid1.FixedCols reichen?
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?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 27. Jun 2015, 19:18
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 )
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#6

AW: TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 28. Jun 2015, 17:04
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 )
Soll das eine Erklärung sein, warum man nacheinander von der größten col her selektieren soll?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 29. Jun 2015, 08:00
Hallo,

der Code von Harry klappt, danke!

Das hier klappt nicht, warum auch immer.
AdvStringGrid1.Col := AdvStringGrid1.FixedCols


Heiko
Heiko
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

AW: TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 29. Jun 2015, 08:25
Soll das eine Erklärung sein, warum man nacheinander von der größten col her selektieren soll?
In der anderen Richtung, von links nach rechts, würde es genauso funktionieren. Aber dann wäre eben am Ende die Zelle in der äussersten rechten Spalte selektiert und nicht die erste. Allem Anschein nach wird erst beim Selektieren einer Zelle die Zelle, die vorher selektiert war, deselektiert.
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#9

AW: TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 29. Jun 2015, 12:26
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
strngrd1.Selection:=TGridRect(Rect(strngrd1.FixedCols,strngrd1.Row,strngrd1.FixedCols,strngrd1.Row)); womit eben die erste Zelle der aktuellen Zeile selektiert wäre.
Kommt zwar am Ende das gleich bei raus, aber man muss nicht jeder Zelle der Zeile rückwärts selektieren.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#10

AW: TStringGrid -[goRowSelect] wird nicht visualisiert

  Alt 29. Jun 2015, 13:38
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).
Das Problem ist ja nicht das Selektieren einer Zelle, das funktioniert, sondern, dass die bisher selektierten Zellen nicht automatisch deselektiert werden (bzw. dieses Deselektieren in der Bildschirmdarstellung nicht erkennbar ist), wenn goRowSelect ausgeschaltet wird.

Kommt zwar am Ende das gleich bei raus, aber man muss nicht jeder Zelle der Zeile rückwärts selektieren.
Ich gehe davon aus, dass du das nicht ausprobiert hast, sonst hättest du gesehen, dass das nicht der Fall ist (vermute ich einmal, ausprobiert habe ich es auch nicht). Das "rückwärts selektieren" macht man ja nicht, damit die Zellen der Reihe nach selektiert werden, sondern damit sie der Reihe nach ERKENNBAR deselektiert werden, wenn die nächste Zelle (links davon) selektiert wird.

Möglicherweise würde auch ein grid.invalidate helfen, mit dem Neuzeichnen nach Veränderungen ist das Stringgrid generell recht zurückhaltend.

Geändert von idefix2 (29. Jun 2015 um 13:47 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 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