Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zugriff von Frame zu Frame (https://www.delphipraxis.net/180453-zugriff-von-frame-zu-frame.html)

Ykcim 21. Mai 2014 13:49


Zugriff von Frame zu Frame
 
Hallo Zusammen,

iuch hätte da mal gerne ein Problem - sorry, ich habs schon:

Ich habe ein Formular, auf dem mehrere Frames liegen. In einem Frame habe ich eine "Public" Procedure geschrieben, auf die ich von einem anderen Frame zugreifen möchte. Ich habe das Frame mit der Procedure in den Uses des Frames mit dem gewünschten Procedureaufruf aufgenommen. Aber zu einem mir nicht erklärenbaren Grund kann ich auf das Frame mit der Procedure nicht zugreifen. Auch nicht testhalber auf dort platzierte Labels. In dem Frame wird das andere Frame einfach nicht gefunden. Ich kann zwar die FrameUnit, die ich eingebunden habe finden, aber mit dem Namen des Frames kann er nichts anfangen...

Frame1: Dort soll die Procedure (Get_Auftrag) aufgerufen werden. Das Frame Frame_Details ist in den Uses.

Delphi-Quellcode:
unit Frame_UebersichtUnit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, AdvObj,
  BaseGrid, AdvGrid, Vcl.ExtCtrls, AdvGlowButton, Frame_DetailsUnit,
  Vcl.StdCtrls, AdvEdit, DBAdvEd, TGridDesignUnit, TAuftragUnit;

type
  TFrame_Uebersicht = class(TFrame)
    Grid_Uebersicht: TAdvStringGrid;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

{$R *.dfm}

procedure TFrame_Uebersicht.Grid_UebersichtSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
   Frame_Details1.Get_Auftrag(Grid_Uebersicht.Cells[1,ARow],Grid_Uebersicht.Cells[3,ARow]);//Das FrameDetails wird nicht gefunden!!!!
end;

end.
Frame2:
Hier ist die Procedure Get_Auftrag

Delphi-Quellcode:
unit Frame_DetailsUnit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
  TAuftragUnit, TArtikelUnit, TArbeitsgangUnit;

type
  TFrame_Details = class(TFrame)
    Panel_Artikel: TPanel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure Fill_Details;
    procedure Get_Auftrag(Auftrag_Nr: string; AG_Nr: string);
  end;

implementation

{$R *.dfm}

procedure TFrame_Details.Get_Auftrag(Auftrag_Nr: string; AG_Nr: string);
begin
   Auftrag.Auftrag_Nr:=Auftrag_Nr;
   Try
      Auftrag.AG_Nr:=StrToInt(AG_Nr);
   Except
      Auftrag.AG_Nr:=0;
   End;
end;
Wenn ich den gleichen Aufruf
Delphi-Quellcode:
Frame_Details1.Get_Auftrag();
auf in dem Form, in dem beide Frames eingefügt sind mache, klappt es sofort...
Kann mir jemand helfen?

Vielen Dank
Patrick

himitsu 21. Mai 2014 14:01

AW: Zugriff von Frame zu Frame
 
Ist der eine Frame in dem anderem Frame drin?
Wenn ja, dann nachfolgends das "Form" gegen "Frame2" austauschen.


"Frame1" ist doch der Name der "Variable" in der Form-klasse, wo die Frame1-Instanz, beim Erstellen ihren Zeiger hinterlegt.
Also mußt du auch in der Form nachsehen und dort über die Variable (das Feld) auf den anderen Frame zugreifen.


Oder, was besser ist:
- die Methode wird als Published im Frame1 veröffentlicht
- in Frame2 gibt es dafür ein Property, welches Zeiger auf diese Methoden annehmen kann
- und dann verknubbelt man im OI die Methode mit dem Event (so, wie man es z.B. mit den OnClick-Events macht)

Ykcim 21. Mai 2014 14:07

AW: Zugriff von Frame zu Frame
 
Hallo himitsu,

nein, beide frames sind auf einer Form eingefügt, aber das eine ich nicht in dem anderen.

Ich habe Ausschnitte aus den Frames in meine Frage eingefügt, dann siehst Du vielleicht schon sofort einen Fehler...

Vielen Dank
Patrick

Zoot 21. Mai 2014 14:17

AW: Zugriff von Frame zu Frame
 
Wo ist denn dein Frame_Details1 deklariert?

ConnorMcLeod 21. Mai 2014 14:22

AW: Zugriff von Frame zu Frame
 
Schiebe die Prozedur in eine neue Unit, die von beiden Frames geused wird.

Ykcim 21. Mai 2014 14:23

AW: Zugriff von Frame zu Frame
 
Was meinst Du mit deklariert?
Frame_Details ist der Name des Frames, auf dem die Procedure (Get_Auftrag) liegt und welches in dem Procedureaufruf-Frame mit Frame_DetailsUnit (der Dateiname des Frames "Frame_Details") in den uses mit eingebunden ist.

Ganz schön oft das Wort "FRame"...

Patrick

Zoot 21. Mai 2014 14:29

AW: Zugriff von Frame zu Frame
 
Zitat:

Zitat von Ykcim (Beitrag 1259648)
Was meinst Du mit deklariert?

"Frame_Details1" dürfte doch eine Variable sein. Und die muss irgendwo deklariert sein, oder?

Ykcim 21. Mai 2014 14:47

AW: Zugriff von Frame zu Frame
 
Mmmh...

Ich habe jetzt einfach in dem Procedureaufruf-Frame eine Variable Frame_Details1: Frame_DetailsUnit.TFrame_Details erstellt. Jetzt scheint es zu klappen... Aber wirklich verstanden, warum das so ist habe ich nicht...

Delphi-Quellcode:
unit Frame_UebersichtUnit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, AdvObj,
  BaseGrid, AdvGrid, Vcl.ExtCtrls, AdvGlowButton, Frame_DetailsUnit,
  Vcl.StdCtrls, AdvEdit, DBAdvEd, TGridDesignUnit, TAuftragUnit;

type
  TFrame_Uebersicht = class(TFrame)
    Grid_Uebersicht: TAdvStringGrid;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var Frame_Details1: Frame_DetailsUnit.TFrame_Details;

implementation

Gruß
Patrick

baumina 21. Mai 2014 14:50

AW: Zugriff von Frame zu Frame
 
Delphi-Quellcode:
var Frame_Details1: Frame_DetailsUnit.TFrame_Details;

Das was du "Variable erstellen" nennst, nennt sich "Variablen - Deklaration", bzw. "eine Variable deklarieren".


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 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