Autor Téma: Systémové funkce z jiné unity  (Přečteno 145 krát)

Offline Joker478

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
    • Verze Delphi: XE2
Systémové funkce z jiné unity
« kdy: 14-11-2017, 16:15:34 »
Zdravím,
 zasekl jsem se u jednoho problému a nevím jak dál.

Mám formulář a volám funkce z dalších Unit. Pokud nepoužívám systémové funkce, vše je ok (UnitYes). Pokud použiji v unitě funkci například Showmessage() nahlásí mi unita chybu (UnitNo). Chápu že musím nastavit část uses, protože si nejsem jistý které uses, požiji všechny z Unit1. Nejsem si jist, že chyba je vyvolaná právě tím. Mohl by mi někdo vysvětlit jak na to ? Používám XE2. Díky moc.

////UNITA1
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, UnitYes, UnitNo;

type
  TForm2 = class(TForm)
    btnTest: TButton;
    procedure btnTestClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.btnTestClick(Sender: TObject);
begin

  ShowMessage( IntToStr(UnitYes.AddFive(2)));  // funkce vyvolana z UnitYes...vse je ok
  UnitNo.AddSeven(2);                                      // funkce volana z UnitNo ... takhle by melo jeji volani vypadat, pokud by vse bylo ok

end;

procedure TForm2.FormCreate(Sender: TObject);
begin

end;

end.
/------------------------
//UNITYES
unit UnitYes;

interface
  function AddFive( a : integer) : integer;

implementation
  function AddFive( a : integer) : integer;
    begin
      AddFive:= a + 5;
    end;

end.
/------------------
///UNITNO
unit UnitNo;

uses                                                            //zatrzeno chyba
  System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

interface                                                       //zatrzeno chyba
  function AddSeven( a : integer) : integer;

implementation                                                  //zatrzeno chyba
    function AddSeven( a : integer) : integer;
      begin
        AddSeven:= a + 7;
        ShowMessage(IntToStr(AddSeven));
      end;


end.

Offline Joker478

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
    • Verze Delphi: XE2
Re:Systémové funkce z jiné unity
« Odpověď #1 kdy: 14-11-2017, 16:33:23 »
Ahoj, díky za rychlou odpověď.
 Jde o to, že není vidět v Unitě1 funkce AddSeven z UnitNo. A podtržení nemůžu ignorovat, protože mi to přeruší spuštění programu.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 363
  • Karma: 15
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:Systémové funkce z jiné unity
« Odpověď #2 kdy: 14-11-2017, 16:36:49 »
Ja se ptal spis na konkretni chybu se kterou kompilator konci; jde o:

Citace
[dcc32 Error] UnitNo.pas(5): E2029 'INTERFACE' expected but 'USES' found

Coz naznacuje v cem je problem; kompilator ocekaval interface, ale nasel uses (klicove slovo interface patri pred klauzuli uses). Unitu UnitNo uprav na neco takoveho:

Kód: Delphi [Vybrat]
  1. unit UnitNo;
  2.  
  3. interface // patri pred uses
  4.  
  5. uses
  6.   System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
  8.  
  9. function AddSeven(Value: Integer): Integer;
  10.  
  11. implementation
  12.  
  13. function AddSeven(Value: Integer): Integer;
  14. begin
  15.   Result := Value + 7; // navrat funkce predavej pres skryte nadeklarovanou promennou Result spis nez pres jeji nazev
  16.   ShowMessage(IntToStr(Result)); // tady tu Result promennou pouzit musis, jinak by slo o samotne volani funkce
  17. end;
  18.  
  19. end.
« Poslední změna: 14-11-2017, 16:43:00 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Joker478

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
    • Verze Delphi: XE2
Re:Systémové funkce z jiné unity
« Odpověď #3 kdy: 14-11-2017, 16:45:40 »
Díky za odpověď, ale furt to není ono. Když to udělám přesně podle tebe, tak je to sice bez chyby, ale furt není vidět UnitNo a tedy ani funkce AddSeven v Unit1:

unit UnitNo;

interface
  //function AddSeven(a : integer) : integer;

uses
  System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;



implementation
    function AddSeven(value : integer) : integer;
      begin
        Result:= value + 7;
        ShowMessage(IntToStr(value));
      end;
end.


A když to udělám takhle, tak je to zase s chybama a nelze spustit:

unit UnitNo;

interface
  function AddSeven(a : integer) : integer;

uses                                                          //ERRROR
  System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;



implementation                                              //ERROR
    function AddSeven(value : integer) : integer;
      begin
        Result:= value + 7;
        ShowMessage(IntToStr(value));
      end;


end.

Offline Joker478

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
    • Verze Delphi: XE2
Re:Systémové funkce z jiné unity
« Odpověď #4 kdy: 14-11-2017, 17:10:39 »
Ještě jedna zajímavost. Když v UnitYes zakomentuju:

interface
  //function AddFive( a : integer) : integer;

Tak je funkce AddFive stejně vidět v Unit1 (myslel jsem si, že jsou vidět jen funkce, které jsou v části interface). Pokud to samé zkusím udělat v UnitNo, tak vidět není. Chyba musí být v uses...

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 363
  • Karma: 15
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
    • Ibi Yoyo :)
Re:Systémové funkce z jiné unity
« Odpověď #5 kdy: 14-11-2017, 17:22:24 »
Neni videt, protoze jsi jeji deklaraci odebral zakomentovanim z interface sekce a v druhem pripade se ji snazil deklarovat pred uses klauzuli. Mrkni je jeste jednou na kod ktery jsem poslal ;)

Poradi je unit, interface, uses, deklarace viditelne vne unity (mezi nez patri deklarace Tve funkce), implementation.
« Poslední změna: 14-11-2017, 17:32:58 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Joker478

  • Nováček
  • *
  • Příspěvků: 5
  • Karma: 0
    • Verze Delphi: XE2
Re:Systémové funkce z jiné unity
« Odpověď #6 kdy: 15-11-2017, 09:22:43 »
Excellent
Rated 1 time
Ahoj, díky moc, vše vyřešeno, přesně jak jsi psal.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: