![]() |
Alias für Objektname?
Moin!
Ich möchte z.B. Form1.Height einfach mit Hoehe bezeichnen und hab mir das so gedacht:
Delphi-Quellcode:
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?
var
Hoehe: ^Integer; begin Hoehe := Pointer(@(Form1.Height)); Hoehe^ := 190; end; Da ich mir relativ sicher war, dass es funktionieren muss hab ich das ganze nochmal mit ner Variable getestet:
Delphi-Quellcode:
In dem Fall ist a am Ende 190 und alles klappt.
var
a: Integer; x: ^Integer; begin a := 10; x := Pointer(@a); x^ := 190; end; Kann mir jemand sagen warum das bei Form1.Height nicht geht? MfG Niels |
Re: Alias für Objektname?
Delphi-Quellcode:
mfG
var
Hoehe: ^Integer; begin Hoehe := @(Form1.Height); Hoehe^ := 190; end; mirage228 |
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:... |
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 |
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 |
Re: Alias für Objektname?
Mal eine andere Frage, warum schreibst Du nicht:
Delphi-Quellcode:
:?: - oder anders, warum so umständlich?
Form1.Height := 190
...:cat:... |
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 |
Re: Alias für Objektname?
Dann übergebe die Componente als Parameter vom Typ TControl, damit hast Du die wichtigsten Eigenschaften verfügbar ;-)
...:cat:... |
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:
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:
uses
unit1; // unit, die die Klasse TForm1 und enthält..von hier erfolgt der Aufruf ... constructor Create(var Formular: TForm1); MfG Niels |
Re: Alias für Objektname?
übergeb doch nen Pointer von TForm1, eben PForm1
EDIT: In der Hauptunit (über der Formdekl.) :
Delphi-Quellcode:
und dann speicher das als Private in deiner Klasse ab.
type
PForm1 = ^TForm1 TForm1 = class(TForm) ... ... end;
Delphi-Quellcode:
nun können die Funktionen und Procs deiner Klasse auf das Form zugreifen ^^
private
FForm: PForm1; ... mfG mirage228 |
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 |
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 |
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 14:54 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