Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Alias für Objektname? (https://www.delphipraxis.net/13740-alias-fuer-objektname.html)

Niels 25. Dez 2003 19:37


Alias für Objektname?
 
Moin!

Ich möchte z.B. Form1.Height einfach mit Hoehe bezeichnen und hab mir das so gedacht:

Delphi-Quellcode:
var
  Hoehe: ^Integer;
begin
  Hoehe := Pointer(@(Form1.Height));
  Hoehe^ := 190;
end;
Jetzt müsste sich ja theoretisch Form1.Height auf 190 ändern. Weil x ja auf die Stelle im RAM zeigt, wo Form1.Height steht. Wenn ich jetzt den Wert dieser Stelle (x^) verändere müsste sich doch auch die Höhe von Form1 ändern oder?

Da ich mir relativ sicher war, dass es funktionieren muss hab ich das ganze nochmal mit ner Variable getestet:

Delphi-Quellcode:
var
  a: Integer;
  x: ^Integer;
begin
  a := 10;
  x := Pointer(@a);
  x^ := 190;
end;
In dem Fall ist a am Ende 190 und alles klappt.

Kann mir jemand sagen warum das bei Form1.Height nicht geht?

MfG Niels

mirage228 25. Dez 2003 19:39

Re: Alias für Objektname?
 
Delphi-Quellcode:
var
  Hoehe: ^Integer;
begin
  Hoehe := @(Form1.Height);
  Hoehe^ := 190;
end;
mfG
mirage228

sakura 25. Dez 2003 19:41

Re: Alias für Objektname?
 
Das geht generell nicht, da Form.Height eine Eigenschaft und nicht eine Variable ist ;-) Eigenschaften wirden intern durch Methoden gesteuert.

...:cat:...

mirage228 25. Dez 2003 19:43

Re: Alias für Objektname?
 
Achso das ist ne Property, sag mir das doch einer! (Ja, obwohl, hätte ich auch selber drauf kommen können)...

mfG
mirage228

Niels 25. Dez 2003 19:48

Re: Alias für Objektname?
 
@mirage228:
Ich hatte das auch schon in Klammern stehn ... hat trotzdem net geklappt

@sakura:
Das war ja auch nur ne Idee von mir, mein oben geschildertes Problem zu lösen. Gibt's denn irgend ne andere Möglichkeit sowas zu machen? Hoehe muss ja kein Pointer sein ... ein Integer wäre mir da sogar lieber.

MfG Niels

sakura 25. Dez 2003 19:50

Re: Alias für Objektname?
 
Mal eine andere Frage, warum schreibst Du nicht:
Delphi-Quellcode:
Form1.Height := 190
:?: - oder anders, warum so umständlich?

...:cat:...

Niels 25. Dez 2003 19:56

Re: Alias für Objektname?
 
Moin!

Das war jetzt nur ein Beispiel mit Form1.Height.
Ich greif aus ner Klasse einer anderen Unit auf Komponenten von Form1 zu. Man soll die Komponentennamen aber variable wählen können und dann einfach im Constructor Create das entsprechende eintragen. Da es relativ viele Zugriffe sind, wäre es umständlich das in jeder Prozedur zu ändern.
Außerdem ist es ja nicht immer Form1, auf welcher die Klasse genutzt wird.

MfG Niels

sakura 25. Dez 2003 19:58

Re: Alias für Objektname?
 
Dann übergebe die Componente als Parameter vom Typ TControl, damit hast Du die wichtigsten Eigenschaften verfügbar ;-)

...:cat:...

Niels 25. Dez 2003 20:23

Re: Alias für Objektname?
 
Ich hab anfangs auch probiert es an den Constructor zu übergeben. Dann hab ichs ja aber nur im Constructor und nicht global in der Klasse verfügbar. Das Problem ist ja auch, wenn ich z.B. in ner Prozedur der Klasse was in die PaintBox auf dem übergebenen Formular zeichne, dann soll das auch im Original zu sehen sein.

Mein Constructor sieht dann jetzt erstmal so aus:

Delphi-Quellcode:
uses
  unit1; // unit, die die Klasse TForm1 und enthält..von hier erfolgt der Aufruf
...
constructor Create(var Formular: TForm1);
Ich hab das Formular als Referenzparameter übergeben um es dann auch ändern zu können. Im Constructor nützt mir das ganze nur eben nicht viel. Ich brauchs global in der Klasse. Deshalb hab ich auch diesen Thread geöffnet :wink:

MfG Niels

mirage228 25. Dez 2003 21:07

Re: Alias für Objektname?
 
übergeb doch nen Pointer von TForm1, eben PForm1

EDIT:
In der Hauptunit (über der Formdekl.) :
Delphi-Quellcode:
type
  PForm1 = ^TForm1
  TForm1 = class(TForm)
  ...
  ...
end;
und dann speicher das als Private in deiner Klasse ab.

Delphi-Quellcode:
private
  FForm: PForm1;
...
nun können die Funktionen und Procs deiner Klasse auf das Form zugreifen ^^

mfG
mirage228

Niels 25. Dez 2003 21:28

Re: Alias für Objektname?
 
Moin mirage228

Ich weiß net ob ich jetzt falsch lieg...aber was bringt mir ein Zeiger auf die Klasse TForm1? Ich will doch mit dem Formular Form1 was machen. Wenn ich jetzt eingeb FForm.Width := 100 dann bekomm ich ne EAccessViolation vom Debugger.

BTW: Warum soll ich nen Pointer auf die Klasse nehmen und nicht die Klasse direkt?

MfG Niels

mirage228 25. Dez 2003 21:32

Re: Alias für Objektname?
 
Du willst doch Form1 verändern oder?

du übergibst der class im Create(@Form1);

und in der klasse kannst du mit FForm^.Height (z.B.) das Formular Form1 ändern!

Ich weiss nicht, ob der die Eigenschaften von Form1 ändern würden, wenn dus ohne Pointer im OnCreate übergibst (und das ganze generell ohne pointer machst).

mfG
mirage228

Niels 25. Dez 2003 21:54

Re: Alias für Objektname?
 
Moin!

LOL...is ja lustig
Genau so hatte ich das heut früh 0 Uhr...nur dass ich nur die 2 entsprechenden Sachen, die ich brauchte weitergegeben hab. Da hab ich ne Fehlermeldung bekommen, als das Create ausgeführt werden sollte. Da mir der Debugger aber den Fehler in Unit1 in der Zeile bla := irgendwas.Create(...); brachte, dachte ich es liegt an meiner Idee...jetzt kam der Fehler wieder und ich hab mir gedacht, wenn du das auch so sagst muss es ja gehn. Da hab ich mal nen BreakPoint gesetzt und bin jede Zeile durchgegangen. Der Fehler war in ner Prozedur der Klasse die im Constructor aufgerufen wird.
Der Fehler liegt net an mir...ich weiß net warum er kommt...vorher gings auch..naja ich hab das jetzt etwas anders gemacht aber auf jeden Fall funzt erstmal alles.
THX

MfG Niels


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