Jeden Form a více Unit – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jeden Form a více Unit – Delphi – Fórum – Programujte.comJeden Form a více Unit – Delphi – Fórum – Programujte.com

 

Radkus
~ Anonymní uživatel
9 příspěvků
20. 3. 2014   #1
-
0
-

Zdravím,

mám v programu jeden Form s Unit1 a Unit2, chtěl bych se zeptat, jak vyvolat proceduru z Unit2 v Unit1. Zjednodušeně to vypadá takto:

Unit1:

unit Unit1;
{$mode objfpc}{$H+}
interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, unit2, Graphics, Dialogs;

type
  { TForm1 }
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.lfm}

{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);

begin
  unit2.uloz_soubor;  
end;

end.

Unit2:  

unit Unit2;
{$mode objfpc}{$H+}

interface
uses
  Classes, SysUtils, FileUtil, Forms, StdCtrls, Controls, Graphics, Dialogs;

 var
  popis: string;

implementation
uses Unit1;

procedure uloz_soubor();
var nazev: string;
begin
  SaveDialog1.Filename:=nazev;
  if SaveDialog1.Execute then
     MemoUlozNacti.Lines.SaveToFile(SaveDialog1.FileName);
end;

end.

Při překladu mi to však vždy vyhodí chybu "Identifier not found". Nevíte někdo, jak by se dala ta procedura vyvolat?

Děkuji

Nahlásit jako SPAM
IP: 194.213.198.–
miHan0
Návštěvník
20. 3. 2014   #2
-
0
-

První co vidím je, že nemáš vyplněný Filename v Unitu2 - sice tam přiřazuješ obsah promenné "nazev", ale ten nemáš nikde inicializovaný, nebo přiřazený.

Za druhé nechápu proč voláš metodu "uloz_soubor" na událost FormCreate - čili v momentě kdy ten form ještě není "vytvořený". Pochopil bych to jako událost na stisk tlačítka, nebo jiného ovládacího prvku. Každopádně pokud chceš takhle "masochisticky", tak raději využij události "onFormShow". To by mohlo tvůj problém vyřešit.

Kód jsem nikam neukládal abych to zkoušel, reaguju jen podle toho co vidím ...

Nahlásit jako SPAM
IP: 46.13.193.–
Radkus
~ Anonymní uživatel
9 příspěvků
20. 3. 2014   #3
-
0
-

#2 miHan
no ono je pravda, že událost a ani názvy jsem nezvolil zrovna šťastně, ale pro výsledný program je to pak nepodstatné. Vytvořil jsem totiž jen co nejjednodušší odlehčeninu, tak aby bylo jasné o co mi jde. Program ve kterém chci pak vyvolávání použít je totiž již značně velký, proto pokud něco testuji spustím si druhé okno a udělám nějakou takovouhle zjednodušeninu, ve které testuji pouze tu danou věc. Chápu, že pak zde mohlo dojít k určitému zmatení o co mi vlastně jde, omlouvám se.

Takže jde o to, abych byl schopen např. po stisku tlačítka na Form1 v události ButtonClick vyvolat proceduru umístěnou na jiné Unit, než na které je ona událost ButtonClick. Pokud tedy mám na Unit1 událost ButtonClick a na Unit2 proceduru procedure udelej_neco(), tak se tato procedura vyvolala a provedla.

Vyzkoušel jsem událost onFormShow, kterou jste radil, ale výsledek je stále stejný, tedy hláška "Identifier not found "uloz_soubor" ".

Nahlásit jako SPAM
IP: 194.213.198.–
Sniper
~ Anonymní uživatel
215 příspěvků
20. 3. 2014   #4
-
0
-

Nemáš nadeklarovanou tu proceduru v interface části unity, takže není zvenku vidět. Prostě do interface v unit2 dej 

procedure uloz_soubor;
Nahlásit jako SPAM
IP: 90.179.201.–
miHan0
Návštěvník
20. 3. 2014   #5
-
0
-

#3 Radkus
Přehlédl jse mještě jednu důležitou věc. V té unit2 není deklarováno interface té métody ...

Nahlásit jako SPAM
IP: 46.13.193.–
Radkus
~ Anonymní uživatel
9 příspěvků
20. 3. 2014   #6
-
0
-

tak už to funguje. Musí se vložit procedure uloz_soubor(); mezi uses a var hned na začátku ještě před implementation. Pokud se to dá jinam, vyhazuje to chyby, nebo nefunguje.

Děkuji všem za pomoc.

Nahlásit jako SPAM
IP: 194.213.198.–
miHan0
Návštěvník
20. 3. 2014   #7
-
0
-

#6 Radkus
Ano, to jsme ti s kolegou Sniperem říkali. Hlavní že to šlape jak potřebuješ.

Nahlásit jako SPAM
IP: 46.13.193.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Unit Graph — založil Denisa13

Zásobník - unit — založil Ed

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý