Delphi-PRAXiS

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 String als Object in StringGrid-Zelle speichern (https://www.delphipraxis.net/136306-string-als-object-stringgrid-zelle-speichern.html)

Helmi 27. Jun 2009 23:08


String als Object in StringGrid-Zelle speichern
 
Hallo,

wie kann man einen String in einer StringGrid-Zelle als Object speichern?

Ich habs so probiert:

Delphi-Quellcode:
StringGrid.Objects[0, 0] := Pointer('ID_TEXT_VersionInfo_Applikation');
und

Delphi-Quellcode:
StringGrid.Objects[0, 0] := String('ID_TEXT_VersionInfo_Applikation');
Aber beides funktioniert nicht.
Wie könnts gehen?

Lannes 27. Jun 2009 23:26

Re: String als Object in StringGrid-Zelle speichern
 
Hallo,

so: Creating a TString object
oder mit PChar geht es auch: Link

Helmi 27. Jun 2009 23:33

Re: String als Object in StringGrid-Zelle speichern
 
Danke für den Tip mit PChar.

Ich habs nun so gelöst:

Schreiben:

Delphi-Quellcode:
StringGrid.Objects[0, 0] := Pointer(PChar('ID_TEXT_VersionInfo_Applikation'));
Auslesen:

Delphi-Quellcode:
S := String(PChar(StringGrid.Objects[0, 0]));

Popov 27. Jun 2009 23:54

Re: String als Object in StringGrid-Zelle speichern
 
Delphi-Quellcode:
type
  TTest = class // Eine einfache Klasse
    Str: String;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Test: TTest;
begin
  Test := TTest.Create; // Objekt erstellen.
  Test.Str := 'Hallo Welt!';

  StringGrid1.Objects[1, 1] := Test; // Die Adresse auf das Objekt übergeben
    // Test nicht freigeben, da Objekt ja bestehen bleiben soll

  StringGrid1.Cells[1, 1] := 'Hier ist was drin.';

    // Ein weiterer Wert für eine andere Zelle
  Test := TTest.Create;
  Test.Str := 'E = m * c²';

  StringGrid1.Objects[2, 2] := Test;

  StringGrid1.Cells[2, 2] := 'Hier auch.';
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Test: TTest;
begin
  Test := TTest(StringGrid1.Objects[1, 1]); // Übergeben
    // Test kann jetzt wieder normal genutzt werden.

  ShowMessage(Test.Str);


  Test := TTest(StringGrid1.Objects[2, 2]);

  ShowMessage(Test.Str);
end;
Nur beachte, daß du, wenn du das Objekt nicht mehr brauchst, es freigibst. Nicht einfach neu zuordnen.

Delphi-Quellcode:
var
  Test: TTest;
begin
  Test := TTest(StringGrid1.Objects[1, 1]);
  Test.Free;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 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