![]() |
von einer Form auf Frame zugreifen
Hallo,
wie kann man von einer form auf eine bestimte procedure (ButtonClick) in einem Frame zugreifen. danke im voraus |
Re: von einer Form auf Frame zugreifen
Delphi-Quellcode:
so oder nicht...
procedure OnButtonClick....
begin frame1.label1.caption='Guten Rutsch'; end |
Re: von einer Form auf Frame zugreifen
danke für guten rutsch wünsche ich dir auch und allen anderen delphi coder.
aber so geht eben nicht. |
Re: von einer Form auf Frame zugreifen
dann liegt es vielleicht daran das diese dinge im protected des Frames liegen. Geht es auch nicht wenn du über Methoden und Propertys im Public darauf zugreifst?
|
Re: von einer Form auf Frame zugreifen
die sind aber im public.
|
Re: von einer Form auf Frame zugreifen
also ich kann ohne probleme auf Buttons etc. eines Frames zugreifen den ich erstellt habe.
Was heißt eigentlich geht nicht? Welche Fehlermeldung kommt wenn du wie im 2ten posting beschrieben darauf zugeifst? |
Re: von einer Form auf Frame zugreifen
also Unit4 ist ein Frame:
Delphi-Quellcode:
Unit 5 ist eine Form:
unit Unit4;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DirDialog, StdCtrls, Menus, Printers; type Tframeumbenennen = class(TFrame) pnlmenue: TPanel; gbeingabe: TGroupBox; edteingabe: TEdit; btnordner: TButton; gbdatei: TGroupBox; lbdateien: TListBox; ordner: TDirDialog; popumbenennen: TPopupMenu; Dateiumbenennen1: TMenuItem; Dateilschen1: TMenuItem; Listelschen1: TMenuItem; Listedrucken1: TMenuItem; PrintDialog1: TPrintDialog; Aktualisieren1: TMenuItem; procedure FrameResize(Sender: TObject); procedure btnordnerClick(Sender: TObject); procedure Listelschen1Click(Sender: TObject); procedure Listedrucken1Click(Sender: TObject); procedure Dateilschen1Click(Sender: TObject); procedure Dateiumbenennen1Click(Sender: TObject); procedure Aktualisieren1Click(Sender: TObject); private { Private-Deklarationen } public procedure dateien_laden(Directory: String); { Public-Deklarationen } end; implementation uses Unit1, Unit5; {$R *.dfm} procedure Tframeumbenennen.dateien_laden(Directory: String); var SR: TSearchRec; begin if (Directory<>'') and (Directory[length(Directory)]<>'\') then Directory:=Directory+'\'; if (FindFirst(Directory + '*.mp3', faAnyFile-faDirectory, SR) = 0) then begin repeat if (SR.Name<>'.') and (SR.Name<>'..') and (SR.Attr<>faDirectory) then begin lbdateien.Items.Add(Directory + SR.Name); end; until FindNext(SR)<>0; FindClose(SR); end; end; procedure Tframeumbenennen.FrameResize(Sender: TObject); begin pnlmenue.Width := frmprogramm.Width - frmprogramm.pnlmenue.Width - 32; pnlmenue.Height := frmprogramm.pnlmenue.Height; end; procedure Tframeumbenennen.btnordnerClick(Sender: TObject); begin lbdateien.Items.Clear; if ordner.Execute then begin edteingabe.Text := ordner.DirName; end; if edteingabe.text <> '' then begin dateien_laden(edteingabe.text); end; end; procedure Tframeumbenennen.Listelschen1Click(Sender: TObject); begin lbdateien.Items.Clear; end; procedure Tframeumbenennen.Listedrucken1Click(Sender: TObject); var Line: Integer; PrintText: TextFile; pesmica: String; begin if PrintDialog1.Execute then begin AssignPrn(PrintText); Rewrite(PrintText); for Line := 0 to lbdateien.Items.Count - 1 do begin pesmica := ExtractFileName(lbdateien.Items[Line]); Writeln(PrintText, inttostr(Line) + ': ' + pesmica); end; CloseFile(PrintText); end; end; procedure Tframeumbenennen.Dateilschen1Click(Sender: TObject); begin DeleteFile(lbdateien.Items[lbdateien.ItemIndex]); lbdateien.Items.Clear; dateien_laden(edteingabe.text); end; procedure Tframeumbenennen.Dateiumbenennen1Click(Sender: TObject); begin if lbdateien.ItemIndex >= 0 then begin ordnerici := ExtractFileDir(lbdateien.Items[lbdateien.ItemIndex]); frmumbenennen1.edtalt.Text := ExtractFileName(lbdateien.Items[lbdateien.ItemIndex]); frmumbenennen1.edtneu.Text := ExtractFileName(lbdateien.Items[lbdateien.ItemIndex]); frmumbenennen1.Show; end; end; procedure Tframeumbenennen.Aktualisieren1Click(Sender: TObject); begin lbdateien.Items.Clear; dateien_laden(edteingabe.text); end; end.
Delphi-Quellcode:
Hier muss ich auf die procedure von Unit4 dateien_laden zugreifen aber es geht nicht!!! :wiejetzt:
unit Unit5;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type Tfrmumbenennen1 = class(TForm) gbumbenennen: TGroupBox; edtalt: TEdit; lbalt: TLabel; lbneu: TLabel; edtneu: TEdit; btnok: TButton; btnno: TButton; procedure btnnoClick(Sender: TObject); procedure btnokClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var frmumbenennen1: Tfrmumbenennen1; ordnerici: String; implementation uses Unit4, Unit1; {$R *.dfm} procedure Tfrmumbenennen1.btnnoClick(Sender: TObject); begin ordnerici := ''; frmumbenennen1.Close; end; procedure Tfrmumbenennen1.btnokClick(Sender: TObject); begin if (ordnerici[length(ordnerici)] <> '\') then begin ordnerici := ordnerici + '\'; end; if ((edtalt.Text <> edtneu.Text) and (edtneu.Text <> '')) then begin RenameFile(ordnerici + edtalt.Text, ordnerici + edtneu.Text);
Delphi-Quellcode:
btnnoClick(Sender);
end else begin MessageDlg('Die Angabe ist Fehlerhaft.'#13'Bitte überprüfen Sie die Angabe!!!', mtInformation, [mbOK], 0); end; end; end. |
Re: von einer Form auf Frame zugreifen
dann musst du
Delphi-Quellcode:
aufrufen. Oder was für ein Fehler kommt dann?
frmumbenennen1.dateien_laden(DeineDatei);
|
Re: von einer Form auf Frame zugreifen
also so ich das sehe ist die procedure im Unit 4 und nicht im unit 5!
wenn schon dan frameumbenennen.dateien_laden(datei); aber das geht leider nicht! |
Re: von einer Form auf Frame zugreifen
du schreibst immer "das geht nicht". Was heißt "geht nicht"? Welche Fehlermeldung kommt?
|
Re: von einer Form auf Frame zugreifen
[Fehler] Unit5.pas(51): Undefinierter Bezeichner: 'dateien_laden'
[Fataler Fehler] Project2.dpr(9): Verwendete Unit 'Unit5.pas' kann nicht compiliert werden [Pascal Fehler] Unit5.pas(1): Die Programmierhilfe kann nicht aufgerufen werden, da der Quelltext Fehler enthält |
Re: von einer Form auf Frame zugreifen
stimmt. Also du könntest die procedure zu einer class-procedure machen und dann
Tframeumbenennen.dateien_laden(DeinVerzeichnis) aufrufen, oder du lässt es wie jetzt musst eine Instanz von Tframeumbennen erzeugen und dann DeineInstanz.dateien_laden(DeinVerzeichnis) aufrufen. wo ist bei dir eigentlich "frameumbenennen" deklariert? |
Re: von einer Form auf Frame zugreifen
könntest du bitte mir ein beispiel schreiben wie ich das anstellen soll. mit classen bin ich nicht so gut.
|
Re: von einer Form auf Frame zugreifen
Hallo zusammen,
ist zwar schon eine Weile her, aber ich hatte / habe ein ähnliches Problem. Und zwar möchte ich verschiedene Frames dynamisch zur Laufzeit auf dem Formular einbinden, welches ich mit
Delphi-Quellcode:
mache. Dies funktioniert auch, allerdings möchte ich dann z.B. zur Laufzeit die Caption-Eigenschaft diverser Labels ändern. Leider weiß ich nun nicht, wie ich auf die Eigenschaften der Controlls in diesem dynamisch eingebundenen Frame zugreifen kann. Habe schon viel versucht, aber schon beim Entwurf scheitere ich jedesmal.
if Assigned(FrameInhalt) then FrameInhalt.Destroy;
FrameInhalt := TFrameFirma.Create(self); FrameInhalt.Parent := FormMain; FrameInhalt.Align := alClient; FrameInhalt.Show; Hat jemand Ideen? Beste Grüße Manfred |
Re: von einer Form auf Frame zugreifen
Wenn du z.B. ein dynamisches Array machst, und dir dadrin alle Frames speicherst:
Delphi-Quellcode:
Und dann schreibst du einfach
Frames: array of TMyFrame;
Delphi-Quellcode:
Verstanden?
setlength(Frames, DieLänge);
Frames[xy] := TMyFrame.Create(Self); Frames[xy].Parent := Form1; Frames[xy].Align := alTop {usw} |
Re: von einer Form auf Frame zugreifen
Versuchs mal so :
Delphi-Quellcode:
Und dann in unit1 :
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFrame2 = class(TFrame) Label_Ueberschrift: TLabel; private procedure SetUeberschrift(const Value: string); function GetUeberschrift: string; { Private-Deklarationen } public property Ueberschrift : string read GetUeberschrift write SetUeberschrift; { Public-Deklarationen } end; implementation {$R *.dfm} { TFrame2 } function TFrame2.GetUeberschrift: string; begin result := Label_Ueberschrift.Caption; end; procedure TFrame2.SetUeberschrift(const Value: string); begin Label_Ueberschrift.Caption := Value; end; end.
Delphi-Quellcode:
var
Form1: TForm1; Frame2 : TFrame2; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Frame2 := TFrame2.Create(self); Frame2.Parent := Form1; Frame2.Align := alClient; Frame2.Ueberschrift := 'Test'; end; |
Re: von einer Form auf Frame zugreifen
@alias5000
Hallo Alias5000, verstanden habe ich Deinen Hinweis leider nicht, aber eigentlich möchte ich mit dem dynamischen Einbinden ja gerade verhindern, dass alle möglichen Frames inkl. aller Datenbankanbindungen beim Start des Programmes / Öffnen des Forms schon direkt geladen werden. Es soll also beim Aufruf eines bestimmten Menüs immer nur der Frame gezogen werden, der relevant ist. Ansonsten könnte ich ja auch alle Frames direkt im Formular einbinden und mit VISIBLE immer nur den Frame erscheinen lassen, den ich benötige. Aber eventuell gibt es ja auch andere Möglichkeiten für dieses Vorgehen, an die nicht zur Zeit nicht gedacht habe. @Nightshade Hallo Nightshade, vielen Dank für den Hinweis, aber
Delphi-Quellcode:
ist doch auch nichts anderes, als wenn ich
Frame2.Ueberschrift := 'Test';
Delphi-Quellcode:
zuweise. Beides gibt übrigens den gleichen Fehler "Undefinierter Bezeichner: 'LabelXYZ'" bzw. "...'Ueberschrift'"
Frame2.LabelXYZ.Caption := 'Test';
Ich denke, dass es daran liegt, dass zur Zeit der Kompilierung die Eigenschaften bzw. Controlls des Frames dem Form noch gar nicht bekannt sind, oder? Besten Dank Euch beiden Manfred |
Re: von einer Form auf Frame zugreifen
[quote="BrinkschulteManfred"]Hallo zusammen,
ist zwar schon eine Weile her, aber ich hatte / habe ein ähnliches Problem. Und zwar möchte ich verschiedene Frames dynamisch zur Laufzeit auf dem Formular einbinden, welches ich mit
Delphi-Quellcode:
mache. Dies funktioniert auch, allerdings möchte ich dann z.B. zur Laufzeit die Caption-Eigenschaft diverser Labels ändern. Leider weiß ich nun nicht, wie ich auf die Eigenschaften der Controlls in diesem dynamisch eingebundenen Frame zugreifen kann. Habe schon viel versucht, aber schon beim Entwurf scheitere ich jedesmal.
if Assigned(FrameInhalt) then FrameInhalt.Destroy;
FrameInhalt := TFrameFirma.Create(self); FrameInhalt.Parent := FormMain; FrameInhalt.Align := alClient; FrameInhalt.Show; Hat jemand Ideen? Es ist wie bei allen Objekten. FrameInhalt ist sicher als TFrame deklariert. Willst du auf Controls aus TFrameFirma zugreifen, musst du TypeCasting verwenden. Also:
Delphi-Quellcode:
Cu, Frank
if frameinhalt is TFrameFirma then
with TFrameFirma(frameinhalt) do begin Labelx.Caption := 'Text'; // und was auch immer end; |
Re: von einer Form auf Frame zugreifen
@milanlu
Alle Methoden eine Klasse sind erst verfügbar, wenn du aus der Klasse ien Object erzeugst. Dann kannst du über die Objectvariable mit FrameUmbenennen.Methode zugreifen. In deinem Beispiel ist es nicht notwendig, die Methode DateiLaden in die Klasse aufzunehmen. Es reicht in der Unit oder, wie schon erwähnt, als Class Methode... Beide Varianten im Beispiel;
Delphi-Quellcode:
Cu, Frank
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type Tframeumbenennen = class(TFrame) private { Private-Deklarationen } public class procedure DateiLaden(Directory: string); { Public-Deklarationen } end; procedure DateiLaden(Directory: string); implementation {$R *.dfm} // Zugrifff einfach über DateiLaden(... procedure DateiLaden(Directory: string); begin // dein Code end; // Zugrifff über Tframeumbenennen.DateiLaden(... class procedure Tframeumbenennen.DateiLaden(Directory: string); begin // Dein Code end; end. |
Re: von einer Form auf Frame zugreifen
@dataspider
Zitat:
Ich habe noch viel zu lernen ... Beste Grüße Manfred |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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