Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Form melyik formról 2016 jan. 25 10:02 #1795

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Pontosabban:
type
 
  { TForm2 }
 
  TForm2 = class(TForm)
    procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
    procedure FormShow(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    constructor Create; overload;
    function ShowModalBy(ACaller: TForm; refID: Integer): Integer;
    procedure AkarmiProc;
  end;
 
var
  Form2: TForm2;
  Caller: TForm;
  ID: integer
 
 
 
// constructor
constructor TForm2.Create;
begin
  inherited;
  ID := 0;
  Caller := nil;
end;
 
 
 
// ShowModalBy
function TForm2.ShowModalBy(ACaller: TForm; refID: Integer): Integer;
begin
  Caller := ACaller;
  ID := refID;
  Result := ShowModal;
end;
 
 
 
// onclosequery
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
  // Caller
  Caller := nil;
  ID := 0;
end;
 
 
 
// onshow
procedure TForm2.FormShow(Sender: TObject);
begin
  // onshow
  if ( Caller <> nil ) then
    ShowMessage( 'OnShow: ' + Caller.ClassName + ', ID: ' + IntToStr(ID) )
    else
    ShowMessage( 'OnShow: Caller nil.' + ' ID: ' + IntToStr(ID) );
end;
 
 
 
// something do
procedure TForm2.AkarmiProc;
begin
  // something
end;

Form melyik formról 2016 jan. 22 20:32 #1792

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Köszönöm, jó ötlet!
Nekem még egy integer változóra is szükségem van, de azt ugyanígy át tudom adni:
type
  TForm2 = class(TForm)
    Caller: TForm;
    ID: Integer = 0;
    function ShowModalBy(ACaller: TForm, refID: Integer): Integer;
    procedure AkarmiProc;
  end;
 
function ShowModalBy(ACaller: TForm, refID: Integer): Integer;
begin
  Caller := ACaller;
  ID:=refID;
  Result := ShowModal;
end;
 
procedure AkarmiProc;
begin
    // ID értékét felhasználom...
end;

Form1-ben:
procedure TForm1.Eljaras;
begin
   // ... anID ...
   TForm2.ShowModalBy(Self, anID);
end;

Köszi, még1x!

Form melyik formról 2016 jan. 22 17:41 #1791

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
Ne globális változót használj, inkább TForm2-t egészítsd ki, hogy könnyebben kezelhető legyen...

Valahogy így:
type
  TForm2 = class(TForm)
    Caller: TForm;
    function ShowModalBy(ACaller: TForm): Integer;
    procedure ShowBy(ACaller: TForm);
  end;
 
function ShowModalBy(ACaller: TForm): Integer;
begin
  Caller := ACaller;
  Result := ShowModal;
  // Caller := nil; // csak ha feltétlenül szükséges
end;
 
procedure ShowBy(ACaller: TForm);
begin
  Caller := ACaller;
  Show;
  // Caller := nil; // csak ha feltétlenül szükséges
end;
Használata pedig TForm1-ben így történhetne:
procedure TForm1.Eljaras;
begin
	TForm2.ShowBy(Self);
	// vagy
	TForm2.ShowModalBy(Self);
end;
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Form melyik formról 2016 jan. 22 14:25 #1790

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Üdv!
Hogy lehet lekérdezni, hogy egy adott formot melyik form hívta meg?
Pl. van két form Form1 és Form2 (és egy MainForm). A Form1-ben meghívom a Form2-t:
Form2.ShowModal;

A Form2-ben szeretném tudni, hogy honnan jöttem. Azaz a Form1 hívott meg és nem a MainForm.
Ezt a Form2-ben le tudom kérdezni valahogy?
A Form2 OnShow eseményében próbáltam, de a Sender paraméter saját maga ilyenkor:
Sender.ClassName = TForm2

Mivel lehetne ezt legegyszerűbben lekérdezni?
Vagy inkább kezeljem egy globális változóban? Pl.
// CallerForm default null
// Form1-ben:
CallerForm:=Form1;
Form2.ShowModal;
// Form2OnCloseQuery-ben:
CallerForm:=null;

  • Oldal:
  • 1