![]() |
Delphi-Version: 5
Frame aus eigener Prozedur aufrufen
Hallo und Hilfe - ich verzweifele!
Ich hab vor ca. 10 Jahren mal Delphi gelernt und seit dem wieder viel vergessen. Jetzt sitze ich hier und versuche aus meiner eigenen Prozedur einen meiner Frames aufzurufen sieht in etwa so aus:
Code:
Jetzt meckert Delphi über einen "Undeclared identifier: 'FrameH'".
procedure CNCCommandBox (H:String);
begin if (H ='H') then begin FrameH.visible:=true; FrameH.Left:=192; FrameH.Top:=232; end Wenn ich
Code:
eingebe und beim Aufruf der Prozedur
procedure CNCCommandBox (H:String; FrameH:TFrameH);
Code:
dann ist alles gut.
CNCCommandBox(meineVariabel,FrameH)
Oder eben auch nicht, weil ich gerne in meiner Prozedur eine Abfrage hätte, mit der ich entscheide, welchen Frame ich aufrufe. So kann ich die Prozedur nur fest mit "FrameH" aufrufen, da ich auch keinen Framenamen als Variabel übergeben kann (String to TFrame gibts nicht und die Workarounds viel zu kompliziert). Was kann ich tun?! Was mach ich falsch?! PS: Delphi Version 7 - habe mich verklickt! |
AW: Frame aus eigener Prozedur aufrufen
Wenn alle Frames von TFrame abgeleitet sind und Du nur Attribute benutzt, die auch bei TFrame vorhanden sind, dann könnte das funktionieren:
Delphi-Quellcode:
procedure CNCCommandBox (H:String; myFrame:TFrame);
Delphi-Quellcode:
procedure CNCCommandBox (H:String;myFrame:TFrame);
begin if (H ='H') then begin myFrame.visible:=true; myFrame.Left:=192; myFrame.Top:=232; end; end; |
AW: Frame aus eigener Prozedur aufrufen
Danke für deine Antwort, aber
Delphi-Quellcode:
ist doch das gleich wie
procedure CNCCommandBox (H:String;myFrame:TFrame);
begin if (H ='H') then begin myFrame.visible:=true; myFrame.Left:=192; myFrame.Top:=232; end; end;
Delphi-Quellcode:
Nur, dass TFrameH mit myFrame ausgetauscht wurde.
procedure CNCCommandBox (H:String;FrameH:TFrame);
begin if (H ='H') then begin FrameH.visible:=true; FrameH.Left:=192; FrameH.Top:=232; end; end; Das funktioniert ja auch, allerdings muss ich jetzt meine Prozedur eben mit
Delphi-Quellcode:
oder eben
CNCCommandBox(Variabel,FrameH)
Delphi-Quellcode:
aufrufen. Das möchte ich ja nicht. Ich will verhindern, dass ich erst zig IF Abfragen haben, wo bei jeder Möglichkeit ein anderer Frame an die Prozedur übergeben wird. Der jeweilige Frame soll über die übermittelte Variabel erst in der Prozedur ermittelt werden.
CNCCommandBox(Variabel,myFrame)
|
AW: Frame aus eigener Prozedur aufrufen
Mir fällt gerade auf, dass ich auch auf die Edit Boxen auf meinen Frames über die Prozedur nicht zugreifen kann. Ich kann in meiner Prozedur von meiner MainForm eine ListBox über
Delphi-Quellcode:
auslesen, den Wert aber nicht in meiner Prozedur per
FormMain.ListBoxCommands.Items[FormMain.ListBoxCommands.ItemIndex]
Delphi-Quellcode:
übergeben. Da hab ich wieder ein
FrameH.EditX.Text:=...
Delphi-Quellcode:
...
[Error]Undeclared identifier: 'EditX'
Irgendwas mach ich doch grundlegend falsch. |
AW: Frame aus eigener Prozedur aufrufen
Hast du denn die Unit mit dem Frame in der Unit mit der Funktion eingebunden?
Langfristig könnte man versuchen, die Verzweigung durch ein Diktionary zu ersetzen, dass von einem String ("H") auf Objekte einer Superklasse der Frames abbildet. |
AW: Frame aus eigener Prozedur aufrufen
Wie der Name des Frames ist, den Du der Prozedur übergibst, ist innerhalb der Prozedure "wurscht".
Alle übergebenen Frames werden innerhalb der Prozedure mit myFrame angesprochen. Nehmen wir an, Du hast mehrere Frames, die da heißen:
Delphi-Quellcode:
alle kannst Du der Prozedure übergeben, eben mit:
FrameA, FrameB, ..., FrameH
Delphi-Quellcode:
In der Prozedure kannst Du sie alle über MyFrame ansprechen. Die Prozedure könntest Du z. B. so erweitern:
CNCCommandBox(meineVariabel,FrameA);
CNCCommandBox(meineVariabel,FrameB); ... CNCCommandBox(meineVariabel,FrameH);
Delphi-Quellcode:
procedure CNCCommandBox(H:String;myFrame:TFrame);
begin if (H ='A') then begin myFrame.visible:=true; myFrame.Left:=1; myFrame.Top:=2; end else if (H ='B') then begin myFrame.visible:=false; myFrame.Left:=1; myFrame.Top:=2; end else if (H ='H') then begin myFrame.visible:=true; myFrame.Left:=192; myFrame.Top:=232; end; end; |
AW: Frame aus eigener Prozedur aufrufen
Man sollte es sich so vorstellen
Delphi-Quellcode:
TGermanSpeaking = class
procedure Say( AText: string ); end; procedure TalkWith( AGermanSpeaking: TGermanSpeaking ); begin AGermanSpeaking.Say( 'Hallo' ); end; var Peter, Klaus: TGermanSpeaking; TalkWith( Peter ); TalkWith( Klaus ); |
AW: Frame aus eigener Prozedur aufrufen
Zitat:
|
AW: Frame aus eigener Prozedur aufrufen
Zitat:
Delphi-Quellcode:
procedure CNCCommandBox(H:String;myFrame:TFrameH);
begin if (H ='A') then begin myFrame.visible:=true; myFrame.Left:=1; myFrame.Top:=2; myFrame.EditX.Text := 'A'; end else if (H ='B') then begin myFrame.visible:=false; myFrame.Left:=1; myFrame.Top:=2; myFrame.EditX.Text := 'A²'; end else if (H ='H') then begin myFrame.visible:=true; myFrame.Left:=192; myFrame.Top:=232; myFrame.EditX.Text := 'A³'; end; end; |
AW: Frame aus eigener Prozedur aufrufen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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