![]() |
Formular Variable in allgemeiner Funktion
Guten Morgen,
ich habe folgendes Problem. Ich habe ca. 8 Formulare die jew. eine Variable vom selben Datentyp und mit gleichen Namen enthalten. In einer allg. Funktion für diese 8 Formulare muss ich auf diese Variable zugreifen. Die Funktion erhält als Parameter das TForm. Ist der Zugriff irgendwie möglich? Auf die Komponenten greife ich mit FindComponent() zu, gibt es soetwas wie FindVariable()?
Code:
Natürlich kann ich so nicht Compilieren da in TForm auf diese Variable zugegriffen wird.
procedure allgFunc(form: TForm);
begin form.meineVariable := '<- Auf diese Variable muss ich zugreifen'; end; Vielen Dank im Vorraus :-D |
AW: Formular Variable in allgemeiner Funktion
Eine Lösung wäre ein Interface das eine Methode für den Zugriff auf die Variable bereitstellt, und welches die Formulare dann implementieren.
|
AW: Formular Variable in allgemeiner Funktion
Hab jetzt selbst keine Erfahrung mit Interfaces, denke aber sooooo schwer wird das schon nicht sein. :wink:
Vielen Dank aufjedenfall! |
AW: Formular Variable in allgemeiner Funktion
Oder du leitest die 8 Formulare von einer gemeinsamen Basisklasse ab, die diese Variable beinhaltet. Die Basisklasse übergibst du dann an deine allgFunc;
Vielleicht brauchst du dann die allgFunc auch gar nicht mehr und kannst deren Funktionalität auch in die Basisklasse packen. |
AW: Formular Variable in allgemeiner Funktion
Zitat:
|
AW: Formular Variable in allgemeiner Funktion
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn die Variable immer den selben Namen und Typ hat kannst du eine "Basis"-Form erstellen und davon ableiten:
Delphi-Quellcode:
Und so leitest du ganz einfach ein Form davon ab:... type TfrmBasis = class(TForm) ... private FDeineVar: Integer; FOnDeineVarChanged: TNotifyEvent; protected procedure SetDeineVar(Value: Integer); public procedure ShowDeineVar; property DeineVar: Integer read FDeineVar write SetDeineVar; property OnDeineVarChanged: TNotifyEvent read FOnDeineVarChanged write FOnDeineVarChanged; end; TfrmBasisClass = class of TfrmBasis; ... procedure TfrmBasis.ShowDeineVar; begin ShowMessage('DeineVar ist "' + IntToStr(Self.DeineVar) + '"'); end; procedure TfrmBasis.SetDeineVar(Value: Integer); begin if FDeineVar <> Value then begin FDeineVar := Value; // Hier kannst du z. B. die Daten verarbeiten, // eine Routine aufrufen oder // ein Event auslösen: if Assigned(FOnDeineVarChanged) then Self.OnDeineVarChanged(Self); end; end;
Delphi-Quellcode:
TfrmEins enthält nun alle Eigenschaften, Methoden, Variablen und Controls von TfrmBasis.
...
uses Windows, ..., Basis; // <-- Basis-Unit/Form einbinden type TfrmEins = class(TfrmBasis) // <-- Form von Basis ableiten private { Private-Deklarationen } public { Public-Deklarationen } end; Und so kannst du eins aufrufen:
Delphi-Quellcode:
Im Anhang ist ein vollständiges Demo-Projekt inkl. Exe. Da habe ich für dich noch ein paar weitere Routinen eingebaut die dir die Verwendung verdeutlichen. Ich hoffe ich konnte dir damit helfen :-)
...
procedure TfrmMain.ShowForm(AFormClass: TfrmBasisClass; ADeineVar: Integer = 0); var FormObj: TfrmBasis; begin FormObj := AFormClass.Create(Self); try FormObj.DeineVar := ADeineVar; if FormObj.ShowModal = mrOK then Self.ShowCurrentDeineVar(FormObj); finally FreeAndNil(FormObj); end; end; procedure TfrmMain.Button1Click(Sender: TObject); begin Self.ShowForm(TfrmEins, 1234); Self.ShowForm(TfrmZwei, 5678); ... end; |
AW: Formular Variable in allgemeiner Funktion
Wow, vielen Dank für die ganzen Antworten!
Werde das ganze vermutlich über die angesprochene Basisklasse machen! Vielen Dank! :-D |
AW: Formular Variable in allgemeiner Funktion
Zitat:
Wenn man das nur per Editor macht muss man dran denken, dass Designer-Klassen nicht nur eine Unit sondern auch ein DFM-File haben. Für die abgeleitete Klasse muss man dort dann das "object", mit dem das DFM-File beginnt, in "inherited" ändern, sonst gibt's Probleme. |
AW: Formular Variable in allgemeiner Funktion
Und zu guter letzt gibt es noch die Möglichkeit, eine Published Property zu deklarieren und per Runtime Type Information auf sie zuzugreifen.
|
AW: Formular Variable in allgemeiner Funktion
Aus #1:
Ich habe ca. 8 Formulare die jew. eine Variable vom selben Datentyp und mit gleichen Namen enthalten. In einer allg. Funktion für diese 8 Formulare muss ich auf diese Variable zugreifen. Die Funktion erhält als Parameter das TForm. Wie wär's mit einer Unit, die in alle Formulare eingebunden wird und die eine dieser bitterbösen globalen Variablen enthält? Und die "allg. Funktion" kommt auch in diese Unit? Der "allg. Funktion" wird doch sowieso das aufrufende Formular übergeben? Übersehe ich da was? Ich meine die Frage ernst! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 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