AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu TStringGrid

Ein Thema von DelTurbo · begonnen am 20. Feb 2010 · letzter Beitrag vom 20. Feb 2010
Antwort Antwort
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#1

Frage zu TStringGrid

  Alt 20. Feb 2010, 10:38
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
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Frage zu TStringGrid

  Alt 20. Feb 2010, 10:45
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
Klaus
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#3

Re: Frage zu TStringGrid

  Alt 20. Feb 2010, 10:49
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.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DonManfred

Registriert seit: 8. Nov 2007
Ort: Düren
55 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Frage zu TStringGrid

  Alt 20. Feb 2010, 12:18
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.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#5

Re: Frage zu TStringGrid

  Alt 20. Feb 2010, 12:28
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.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Frage zu TStringGrid

  Alt 20. Feb 2010, 12:56
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#7

Re: Frage zu TStringGrid

  Alt 20. Feb 2010, 13:11
Muss ich mir mal ansehen UND begreifen . Weil mein grid ja keine feste grösse hat.

Vielen dank erstmal
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Frage zu TStringGrid

  Alt 20. Feb 2010, 13:30
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:
Grid.Objects[0, Row] := TObject(ThreadID);
  :
ThreadID := Integer(Grid.Objects[0, Row]);
Gruß Hawkeye
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#9

Re: Frage zu TStringGrid

  Alt 20. Feb 2010, 13:39
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 meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:12 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