AGB  ·  Datenschutz  ·  Impressum  







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

Pointer und TObject

Ein Thema von Martin K · begonnen am 29. Apr 2006 · letzter Beitrag vom 29. Apr 2006
Antwort Antwort
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Pointer und TObject

  Alt 29. Apr 2006, 15:07
Wie geht das, wenn ich einen Zeiger z.B. auf Form1.Caption zeigen lassen will?
Wenn ich dann den Wert des Zeiger ändere, müsste sich doch auch die Caption von Form1 ändern...

Theoretisch müsste es doch so gehen:
Delphi-Quellcode:
type
  a = ^String;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  b: a;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  b := @Caption;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  b^ := 'test';
end;
Aber praktisch funzt es nich...
Kann mir jemand den Code so abändern, dass er funzt?


Es soll natürlich nicht nur mit Form1.Caption gehen, sondern z.B. auch mit Label1.Caption oder Label1.Font.Name etc.

Ziel ist es, ein Array mit Zeigern auf String zu erstellen.
Dann noch eine Prozedur der ein Zeiger auf einen String übergeben wird (z.B. Label1.Font.Name), dieser wird dann dem Array hinzugefügt.
Führe ich dann z.B. diesen Befehl aus (b ist dann mein Array):
b[1] := 'Arial'
so sollte also die Schriftart von Label1 Arial sein.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Pointer und TObject

  Alt 29. Apr 2006, 15:13
Caption ist eine Eigenschaft und keine Variable. Von einer Eigenschaft, kann man keinen Pointer holen, da in der Regel eine Funktion dahinter liegt. Das funktioniert nur mit normalen Variablen.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Pointer und TObject

  Alt 29. Apr 2006, 15:19
Hmm...

Und wie kann ich dann dieses Problem lösen

Also mein eigentliches Ziel ist es, eine vereinfachte IniFile Unit zu erstellen.
Es sollen einfach verschiedene Komponenten-Eigenschaften hinzugefügt werden, z.B. AddComponent(Form1.Caption);
Diese Komponenten-Eigenschaften werden dann alle auf einmal aus der Ini-Datei geladen bzw. in die Ini gespeichert.

z.B.:
Code:
[Form1]
Caption=test
Width=640
Height=480
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Pointer und TObject

  Alt 29. Apr 2006, 15:23
Das solltest du sowieso nie machen!

Du kannst dich nie darauf verlassen, dass die Speicheradressen zwischen Programmaufrufen die selben bleiben.

Für so etwas, was du machen willst, gibt es die Hier im Forum suchenSerialization, Khabarakh kann dazu mehr sagen, und die dpCollectiondpCollection (allerdings dann nur für selbst erstellte Klassen).

EDIT: Hier stehts: http://www.delphipraxis.net/internal...ct.php?t=72501 (.Net-Thema, einfach n bisschen nach unten scrollen, da steht wies für Win32 geht )
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Pointer und TObject

  Alt 29. Apr 2006, 15:23
such ma nach RTTI
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Pointer und TObject

  Alt 29. Apr 2006, 15:38
Zitat von DGL-luke:
EDIT: Hier stehts: http://www.delphipraxis.net/internal...ct.php?t=72501 (.Net-Thema, einfach n bisschen nach unten scrollen, da steht wies für Win32 geht )
Hmm.... sieht gut aus, verstehe aber wenig.

Evtl. Beispiel für eine procedure AddComponent (s. oben)?
wäre echt nett...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Pointer und TObject

  Alt 29. Apr 2006, 15:55
Hab noch eine andere Idee:

Allerdings: Gibts so was wie FindProperty (also wie FindComponent), so dass ich z.B. die Eigenschaft Caption von meiner Form1 erhalten kann?
etwa so: FindProperty('Form1.Caption');

Dann wäre es nämlich einfach:
Delphi-Quellcode:
//speichern:
procedure Speichern(ObjectName, PropertyName: String);
begin
  IniFile.WriteString(ObjectName, PropertyName, FindProperty(ObjectName+'.'+PropertyName);
end;

//Aufruf:
Speichern('Form1', 'Caption');


//laden:
procedure Laden;
var s1, s2: TStrings; i1, i2: Integer;
begin
  s1 := TStrings.Create;
  s2 := TStrings.Create;
  IniFile.ReadSections(s1);

  for i1 := 0 to s1.Count-1 do
  begin
    IniFile.ReadSection(s1[i1], s2);

    for i2 := 0 to s2.Count-1 do
      FindProperty(s1[i1]+'.'s2[i2]) := IniFile.ReadString(s1[i1], s2[i2], '');

    s2.Clear;
  end;

  s1.Free;
  s2.Free;
end;
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Pointer und TObject

  Alt 29. Apr 2006, 16:04
Zitat von DGL-luke:
Du kannst dich nie darauf verlassen, dass die Speicheradressen zwischen Programmaufrufen die selben bleiben.
Genaugenommen kann man sich darauf verlassen, dass es nicht so ist. Man hat heutzutage mindestens 256 MB RAM zur Verfügung, die Wahrscheinlichkeit, dass da eine Variable zweimal hintereinander den gleichen Speicherplatz bekommt, ist verschwindend gering. Wenn der Pointer geladen wird, zeigt er in ein Speichernirvana und produziert mit hoher Wahrscheinlichkeit eine AV.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#9

Re: Pointer und TObject

  Alt 29. Apr 2006, 17:09
Guck dir mal das an: http://www.delphipraxis.net/internal...ct.php?t=80217

Mit n bisschen Abänderung sollte das was für dich sein. Statt die ganzen Komponenten zu speichern, wie ich das mache, köntest du mit... wie heißt die Funktion nochmal? hm... muss mir die RTTI auch nochmal genauer angucken... hm... Delphi-Referenz durchsuchenGetPublishedProperty glaub ich. Guck mal in die Hilfe...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Pointer und TObject

  Alt 29. Apr 2006, 17:14
Hab mal einen neuen Thread für dieses Thema gemacht.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  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 12:59 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