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 StringGrid Zellen Markierung (https://www.delphipraxis.net/11331-stringgrid-zellen-markierung.html)

Blechwolf 4. Nov 2003 14:37


StringGrid Zellen Markierung
 
Salut,

ich habe da mal ne Frage...
Ich habe eine Tabelle (ein String Grid), in das Werte-Paare eingefügt werden. In einer Spalte die X-Werte, in der nächsten Spalte dann die Y-Werte.

Ich will nun, wenn ich einen X-Wert auswähle auch automatisch den entsprechenden Y-Wert auswählen bzw. wenn ich auf den Y-Wert klicke, auch automatisch den entsprechenden X-Wert ausgewählt bekommen.

Mein StringGrid hat die Eigenschaft goRangeselect auf True gesetzt bekommen, und die OnSelectCell sieht wie folgt aus:

Delphi-Quellcode:
procedure TFrmSeries.SGValueTableSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  myRect : TGridRect;
begin
  if ACol mod 2 = 0 then
    begin
      myRect.Left := ACol;
      myRect.Right := ACol+1;
    end
  else
    begin
      myRect.Left := ACol-1;
      myRect.Right := ACol;
    end;

  myRect.Top := ARow;
  myRect.Bottom := ARow;

  SGValueTable.Selection := myRect;
 
  // Alles 3 ausprobiert, hilft nix
//  SGValueTable.Update();
//  SGValueTable.Refresh();
//  SGValueTable.Repaint();
end;
In den Spalten mit den geraden Nummern (0,2,4,...) stehen die X-Werte drin in den anderen die Y-Werte. Deswegen zuerst die Abfrage wo ich bin, und dementsprechend wird dann myRect gefüllt.

Nur irgendwie zeigt der mir nicht die Markierung an, die ich haben will, sondern eben weiterhin die einzelne Zelle.
Hat jemand ne Idee ??

Grüße

Wolf

himitsu 4. Nov 2003 14:48

Re: StringGrid Zellen Markierung
 
Hast du auch in der Eigenschaft SGValueTable.Options goRangeSelect auf True gesetzt?
Sonnst kannst du immer nur eine Zelle auf einmal auswählen.

Blechwolf 4. Nov 2003 14:51

Re: StringGrid Zellen Markierung
 
Zitat:

Zitat von Blechwolf
[...schnipp...]
Mein StringGrid hat die Eigenschaft goRangeselect auf True gesetzt bekommen, und die OnSelectCell sieht wie folgt aus:
[...schnipp...]

Wer lesen kann ist manchmal klar im Vorteil, auch wenn oft die Zeit dazu fehlt ;o)
Nicht böse sein...

himitsu 4. Nov 2003 15:48

Re: StringGrid Zellen Markierung
 
Ich vermute mal das durch OnSelectCell deine Zuweisung danach wieder überschrieben wird.
Wenn das Ganze aber in OnClick verschoben wird, geht es.

Delphi-Quellcode:
{SGValueTable / OnClick}
Procedure TForm1.SGValueTableClick(Sender: TObject);
  Var myRect: TGridRect;

  Begin
    If SGValueTable.Selection.Left mod 2 = 0 Then Begin
      myRect.Left := SGValueTable.Selection.Left;
      myRect.Right := SGValueTable.Selection.Left + 1;
    End Else Begin
      myRect.Left := SGValueTable.Selection.Left - 1;
      myRect.Right := SGValueTable.Selection.Left;
    End;
    myRect.Top := SGValueTable.Selection.Top;
    myRect.Bottom := SGValueTable.Selection.Top;
    SGValueTable.Selection := myRect;
  End;

{oder etwas kleiner}

Procedure TForm1.SGValueTableClick(Sender: TObject);
  Begin
    SGValueTable.Selection := TGridRect(Rect(
      SGValueTable.Selection.Left div 2 * 2, SGValueTable.Selection.Top,
      SGValueTable.Selection.Left div 2 * 2 + 1, SGValueTable.Selection.Top));
  End;
:warn: Bei einer Zuweisung auf Selection wird die letzte Zelle in der Markierung (unten/rechts) aktiviert.

Blechwolf 4. Nov 2003 15:56

Re: StringGrid Zellen Markierung
 
Super, das funktioniert, wenn auch etwas zeitverzögert :o)
Aber zumindest schonmal deutlich besser als vorher !!

Bedankt
Grüße
Wolf

Niko 4. Nov 2003 17:13

Re: StringGrid Zellen Markierung
 
Die Eigenschaft goRowSelect sollte genau das bewirken, was du willst.

Blechwolf 7. Nov 2003 12:34

Re: StringGrid Zellen Markierung
 
Zitat:

Zitat von Niko
Die Eigenschaft goRowSelect sollte genau das bewirken, was du willst.

Leider nicht, da ich ja evtl. mehrere Datenreihen in der Tabelle drin habe.
Also X1 Y1 X2 Y2 X3 Y3 etc.
und goRowSelect bewirkt daß dann ALLE Werte in der entsprechenden Zeile ausgewählt werden. Ich will aber halt nur die zwei X1 Y1 bzw. X2 Y2 etc. haben.
Wie gesagt, die Lösung die hier präsentiert wurde ist schon nicht so verkehrt.

Grüße

Wolf

thawka 29. Nov 2003 22:12

aktuell ausgewählte Zeile in Statusbar anzeigen
 
Habe auch ein kleines Problem mit der Markierung in einem StringGrid:
Ich möchte in einer Statusbar die aktuell ausgewähle Zeile anzeigen lassen, und zwar als Nummer. Also wenn man z. B. Zeile 5 von 10 auswählt, soll unten "Zeile 5 ausgewählt" stehen. Wenn man eine andere auswählt, dann diese entsprechend. Bei der Listbox weiß ich es, da hab ich Listbox.ItemIndex genommen. Aber bei StringGrid weiß ich nicht, wie es funktionieren soll. Habe auch in anderen Informationsquellen nichts dazu gefunden. Kann mir jemand helfen?

Danke im Voraus :spin:

Christian Seehase 30. Nov 2003 00:32

Re: StringGrid Zellen Markierung
 
Moin Thawka,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Schau Dir doch mal die Ereignisse des StringGrids an, und deren Parameter.
Damit müsstest Du eigentlich die Lösung finden können.

thawka 30. Nov 2003 10:47

Re: StringGrid Zellen Markierung
 
Vielen Dank für die Begrüßung! :wink:
Ich hab mir die Ereignisse mal näher angeschaut, aber nichts relevantes gefunden :cry:... Die Ereignisse "OnRowMoved" und "OnSelectCell" kamen für mich näher in Betracht, halfen aber auch nicht. Aber ich hab bei Google einen Hinweis gefunden, daß die Ausgabe der aktiven Zeile eventl. mit Row & Col festgestellt werden kann, nur weiß ich nicht, wie das gehen soll?

Dankeschön im Voraus für hilfreiche Hinweise :angle:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.
Seite 1 von 2  1 2      

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