![]() |
Frage zu TStringGrid
Hi,
ich habe eine frage zum TStringGrid. Ich habe z.b. 20 zeilen die jeweils einem "abgetrennten" thread gehören. Damit ich die zeile aus dem grid zuordnen kann, bin ich hingegangen und habe das grid um eine celle erweitert. Dort schreibe ich dann die nummer rein. Nun ist das natürlich nicht schön, weil der grid nicht änderbar sein darf. Sonst würde man ja die info ins fenster ziehen. Gibt es eine andere möglichkeit so einem grid pro row einen wert mitzugeben? Ein tag habe ich leider nicht gefunden. Danke im voraus |
Re: Frage zu TStringGrid
Mahlzeit,
vielleicht verstehe ich Dich nicht richtig, aber die Zeile eines StringGirds läßt sich doch einwandfrei durch die Zeilennummer/Index identifizieren. Grüße Klaus |
Re: Frage zu TStringGrid
Die laufenden threads sind nach einer zeit nicht mehr in der reihenfolge. Die haben dann z.b. die nummern 5,10,49,50. Deswegen kann ich das nicht, so wie du meinst, zuweisen. Ich muss jeder row diese nummer mitgeben. Damit ich bei einem doppelklick auf die row weis zu wem sie gehört.
|
Re: Frage zu TStringGrid
du erstellst beim erstellen der Liste eine weitere COLUMN je ROW in der du die threadid speicherst. Beim doppelklick auf eine zeile liest du die dann die id aus der richtigen column.
|
Re: Frage zu TStringGrid
Genau so mache ich es ja im moment. Aber dann muss das grid ja "fest" sein. Sonst würde man die daten ja sehen können.
Deswegen suche ich einen anderen weg. Ich dachte das man mit irgendeinem trick der row was "mitgeben" kann. |
Re: Frage zu TStringGrid
Du könntest Dir eine Klasse deklarieren und diese mit AddObject einfügen. Beispiel (nur heruntergetippt und nicht groß getestet):
Delphi-Quellcode:
{$R *.dfm}
type TTestclass = class private FNumber: integer; FText: string; public property Number: integer read FNumber write FNumber; property Text: string read FText write FText; end; procedure TForm1.FormCreate(Sender: TObject); var Testclass: TTestclass; i: integer; begin StringGrid1.Rows[1].Clear; StringGrid1.Rows[1].Add(''); for i := StringGrid1.FixedCols to StringGrid1.ColCount - 1 do begin Testclass := TTestclass.Create; Testclass.Number := i; Testclass.Text := 'Test'; StringGrid1.Rows[1].AddObject(Testclass.Text,Testclass); end; end; procedure TForm1.FormDestroy(Sender: TObject); var i,j: integer; begin for i := 0 to StringGrid1.RowCount - 1 do for j := 0 to StringGrid1.ColCount - 1 do StringGrid1.Rows[i].Objects[j].Free; end; procedure TForm1.StringGrid1Click(Sender: TObject); var Testclass: TTestclass; begin Testclass := TTestclass(StringGrid1.Rows[StringGrid1.Row].Objects[StringGrid1.Col]); if Assigned(Testclass) then ShowMessage(IntToStr(Testclass.Number)); end; |
Re: Frage zu TStringGrid
Muss ich mir mal ansehen UND begreifen :P . Weil mein grid ja keine feste grösse hat.
Vielen dank erstmal |
Re: Frage zu TStringGrid
Hallo,
es gibt einige Möglichkeiten. Die sauberste besteht wohl darin, neben dem Grid eine Zuordnungstabelle zu pflegen, in der für jeden Thread die zugehörige Zeile des Gitters abgelegt wird. Aber auch im Grid kann man weitere (unsichtbare) Informationen unterbringen. Der bereits erwähnten Zusatzspalte könntest du die Breite 0 oder -1 geben, um sie vor dem Anwender zu verbergen. Eine Alternative wäre das Objects-Array von TStringGrid, in dem für jede Zelle ein TObject-Element abgelegt werden kann. Falls du es noch nicht verwendest, kannst du dort beispielsweise für die Zellen der ersten Spalte über einen Typecast auch die Thread-ID einer Zeile hinterlegen:
Delphi-Quellcode:
Gruß Hawkeye
Grid.Objects[0, Row] := TObject(ThreadID);
: ThreadID := Integer(Grid.Objects[0, Row]); |
Re: Frage zu TStringGrid
BOING... breite 0 wär im grunde am einfachsten. Dann brauch ich garnix ändern. Also manchmal steht man wie ochs vorm berg.
Ich werde mir trotzdem heute abend mal alle 3 optionen ansehen. Was ich nicht möchte, ist das mit der extra tabelle handlen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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