Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi von einer Form auf Frame zugreifen (https://www.delphipraxis.net/59974-von-einer-form-auf-frame-zugreifen.html)

milanlu 31. Dez 2005 20:02

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

SirThornberry 31. Dez 2005 20:04

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?

milanlu 31. Dez 2005 20:07

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.

BrinkschulteManfred 22. Feb 2006 13:05

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:
  if Assigned(FrameInhalt) then FrameInhalt.Destroy;
FrameInhalt := TFrameFirma.Create(self);
FrameInhalt.Parent := FormMain;
FrameInhalt.Align := alClient;
FrameInhalt.Show;
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.

Hat jemand Ideen?

Beste Grüße
Manfred

alias5000 22. Feb 2006 13:29

Re: von einer Form auf Frame zugreifen
 
Wenn du z.B. ein dynamisches Array machst, und dir dadrin alle Frames speicherst:

Delphi-Quellcode:
Frames: array of TMyFrame;
Und dann schreibst du einfach
Delphi-Quellcode:
setlength(Frames, DieLänge);
Frames[xy] := TMyFrame.Create(Self);
Frames[xy].Parent := Form1;
Frames[xy].Align := alTop
{usw}
Verstanden?

Nightshade 22. Feb 2006 13:30

Re: von einer Form auf Frame zugreifen
 
Versuchs mal so :

Delphi-Quellcode:
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.
Und dann in unit1 :

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;

BrinkschulteManfred 22. Feb 2006 14:40

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:
  Frame2.Ueberschrift := 'Test';
ist doch auch nichts anderes, als wenn ich
Delphi-Quellcode:
  Frame2.LabelXYZ.Caption := 'Test';
zuweise. Beides gibt übrigens den gleichen Fehler "Undefinierter Bezeichner: 'LabelXYZ'" bzw. "...'Ueberschrift'"

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

dataspider 22. Feb 2006 15:08

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:
  if Assigned(FrameInhalt) then FrameInhalt.Destroy;
FrameInhalt := TFrameFirma.Create(self);
FrameInhalt.Parent := FormMain;
FrameInhalt.Align := alClient;
FrameInhalt.Show;
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.

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:
if frameinhalt is TFrameFirma then
  with TFrameFirma(frameinhalt) do
  begin
    Labelx.Caption := 'Text';
    // und was auch immer
  end;
Cu, Frank

dataspider 22. Feb 2006 15:21

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:
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.
Cu, Frank

BrinkschulteManfred 22. Feb 2006 15:42

Re: von einer Form auf Frame zugreifen
 
@dataspider
Zitat:

Es ist wie bei allen Objekten.
FrameInhalt ist sicher als TFrame deklariert.
Willst du auf Controls aus TFrameFirma zugreifen, musst du TypeCasting verwenden.
Super, das war es, was ich gesucht habe! :spin2:

Ich habe noch viel zu lernen ...

Beste Grüße
Manfred


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr.
Seite 2 von 2     12   

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