AGB  ·  Datenschutz  ·  Impressum  







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

Frame aus eigener Prozedur aufrufen

Ein Thema von pmros · begonnen am 8. Sep 2015 · letzter Beitrag vom 9. Sep 2015
Antwort Antwort
Seite 1 von 3  1 23      
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#1

Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 20:25
Delphi-Version: 5
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:
procedure CNCCommandBox (H:String);
begin
if (H ='H') then begin
FrameH.visible:=true;
FrameH.Left:=192;
FrameH.Top:=232;
end
Jetzt meckert Delphi über einen "Undeclared identifier: 'FrameH'".
Wenn ich
Code:
procedure CNCCommandBox (H:String; FrameH:TFrameH);
eingebe und beim Aufruf der Prozedur
Code:
CNCCommandBox(meineVariabel,FrameH)
dann ist alles gut.

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!

Geändert von pmros ( 8. Sep 2015 um 20:25 Uhr) Grund: verklickt
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 20:45
Wenn alle Frames von TFrame abgeleitet sind und Du nur Attribute benutzt, die auch bei TFrame vorhanden sind, dann könnte das funktionieren:
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;
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#3

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 20:52
Danke für deine Antwort, aber

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;
ist doch das gleich wie

Delphi-Quellcode:
procedure CNCCommandBox (H:String;FrameH:TFrame);
begin
  if (H ='H') then begin
    FrameH.visible:=true;
    FrameH.Left:=192;
    FrameH.Top:=232;
  end;
end;
Nur, dass TFrameH mit myFrame ausgetauscht wurde.

Das funktioniert ja auch, allerdings muss ich jetzt meine Prozedur eben mitCNCCommandBox(Variabel,FrameH) oder eben CNCCommandBox(Variabel,myFrame) 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.
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#4

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 20:59
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 FormMain.ListBoxCommands.Items[FormMain.ListBoxCommands.ItemIndex] auslesen, den Wert aber nicht in meiner Prozedur per FrameH.EditX.Text:=... übergeben. Da hab ich wieder ein [Error]Undeclared identifier: 'EditX' ...

Irgendwas mach ich doch grundlegend falsch.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:05
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.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:06
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:FrameA, FrameB, ..., FrameH alle kannst Du der Prozedure übergeben, eben mit:
Delphi-Quellcode:
CNCCommandBox(meineVariabel,FrameA);
CNCCommandBox(meineVariabel,FrameB);
...
CNCCommandBox(meineVariabel,FrameH);
In der Prozedure kannst Du sie alle über MyFrame ansprechen. Die Prozedure könntest Du z. B. so erweitern:
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;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:11
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 );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#8

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:12
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.
Das habe ich. In der Unit, in der meine Funktion eingebunden ist habe ich testweise meinen Frame über einen Button aufgerufen, das funktionierte problemlos. Aber sobald ich das über meine eigene Funktion versuche(die in der gleichen Unit ist!!!), klappt es nicht mehr.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:17
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 FormMain.ListBoxCommands.Items[FormMain.ListBoxCommands.ItemIndex] auslesen, den Wert aber nicht in meiner Prozedur per FrameH.EditX.Text:=... übergeben. Da hab ich wieder ein [Error]Undeclared identifier: 'EditX' ...

Irgendwas mach ich doch grundlegend falsch.
Bei der Übergabe von TFrame an die Prozedure sind innerhalb der Prozedure nur die Attribute bekannte, über die TFrame verfügt. Wenn FrameH von TFrame abgeleitet ist und dazu zusätzlich ein Edit bekommen hat, so ist dieses in der Prozedure nicht bekannt, dann muss die Prozedur geändert werden, funktioniert aber nicht mehr mit beliebigen Frames, sondern nur noch mit Frames vom Typ TFrameH und den davon abgeleiteten Varianten.
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 := '';
  end else
  if (H ='H') then begin
    myFrame.visible:=true;
    myFrame.Left:=192;
    myFrame.Top:=232;
    myFrame.EditX.Text := '';
  end;
end;
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#10

AW: Frame aus eigener Prozedur aufrufen

  Alt 8. Sep 2015, 21:23
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:FrameA, FrameB, ..., FrameH alle kannst Du der Prozedure übergeben, eben mit:
Das habe ich verstanden, danke Allerdings will ich, dass der jeweilige Frame aufgrund der Variabel H ausgewählt wird. Deswegen will ich ja nur die Variabel H an die Prozedur übergeben und dann in der Prozedur über die Variabel entscheiden, welcher Frame gezeigt wird und welche Elemente auf dem jeweiligen Frame angesprochen werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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:52 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