Global procedure

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Global procedure

Mesaj gönderen mrtblt »

Diger formlarda kullanabilecegim global bir procedure olusturmaya calistim (loginunit isimli formda) ve asagidaki kodu yazdim

Kod: Tümünü seç

procedure Tfrm_login.usercheck(m_id : integer);
begin
  str1 := inttostr(kid)+'.'+inttostr(m_id);
  if dm.tbl_ky.Locate('id',str1,[])= true then
  begin
    i1 := dm.tbl_ky.FieldByName('deger').asinteger;
    if i1 = 1 then exit
    else
      showmessage('Bu modulu kullanma yetkiniz yok!');
    close;
  end;
end;
daha sonra bunu public declarations altina soyle yerlestirdim

Kod: Tümünü seç

    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure usercheck(m_id : integer);
  end;
bunu prcedure i paska bir forma ekledigimde, su sekilde :

Kod: Tümünü seç

procedure Tfrm_omega.FirmaTanimlari1Click(Sender: TObject);
begin
  usercheck(1);
  if frm_sirket = nil then
  begin
    frm_sirket := tfrm_sirket.create(self);
derleme esnasinda su hatayi aliyorum
[Pascal Error] omegaUnit.pas(114): E2003 Undeclared identifier: 'usercheck'
oysaki omagaunit teki uses kismina bu prcedure i tnimladigim loginunit i de eklemistim.

Bu hata nereden kaynaklaniyor olabilir?
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Re: Global procedure

Mesaj gönderen vampir261 »

mrtblt yazdı:
daha sonra bunu public declarations altina soyle yerlestirdim

Kod: Tümünü seç

    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure usercheck(m_id : integer);
  end;
Bu kısmı şu şekilde değiştir.

Kod: Tümünü seç

    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
      published
          procedure usercheck(m_id : integer);
  end;
Anlatırsanız unuturum,
Gösterirseniz hatırlarım,
Yaptırırsanız anlarım.
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Mesaj gönderen mrtblt »

Evet senin dedigin sekilde yaptim

Kod: Tümünü seç

  public
    published
    procedure usercheck(m_id : integer);
  end;
ama degisen bisey olmadi. hala diger form bu procedure'i tanimiyor acaba bu proseduru kullandigim formdada ayrica bisey yapmalimiyim (prosedurun yapildigi unit'i uses kismina eklemekten baska)
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Mesaj gönderen vampir261 »

Bu form1 procedure içeren

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  procedure usercheck(m_id : integer);
implementation

uses Unit2;

{$R *.dfm}

procedure usercheck(m_id : integer);
begin
{  str1 := inttostr(kid)+'.'+inttostr(m_id);
  if dm.tbl_ky.Locate('id',str1,[])= true then
  begin
    i1 := dm.tbl_ky.FieldByName('deger').asinteger;
    if i1 = 1 then exit
    else
      showmessage('Bu modulu kullanma yetkiniz yok!');
    close;
  end;}
  ShowMessage('Çalıştı');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    form2.show;
end;

end.

Bu da form2 form1deki procedure çağırmak istediğin

Kod: Tümünü seç

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
    usercheck(1);
end;

end.
kolay gelsin
Anlatırsanız unuturum,
Gösterirseniz hatırlarım,
Yaptırırsanız anlarım.
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Mesaj gönderen mrtblt »

burada ilk defa gordugum bisey var.

var altina proseduru yerlestirmissin boyle birsey yapilabiliyormu? ayrica public te proceduru gostermemissin
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Mesaj gönderen vampir261 »

Kod çalışıyor mu :?: İşini görüyorsa şimdilik kullan daha iyi bir kod bulursan onunla yer değiştirirsin.

Ben uzun süredir orda procedure yazıp çalıştırdım. Doğrusu pek bir sıkıntı çekmedim. :D Muhtemelen dez avantajalrı vardır üstadlar daha iyi bilirler. :roll: İyi çalışmalar.
Anlatırsanız unuturum,
Gösterirseniz hatırlarım,
Yaptırırsanız anlarım.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Private, public ya da published altına prosedür yazarsanız, class'ın prosedürü olur ve doğal olarak classAdi.prosedur şeklinde çağırmanız gerekir.

İkinci cevapta ise aslında var altında tanımlanmamış.

şöyle ki:

Kod: Tümünü seç

  const 
    A = 5;
  var
    B: Integer;
  
  procedure C;

implementation
ile

Kod: Tümünü seç

  procedure C;
  const 
    A = 5;
  var
    B: Integer;

implementation
arasında hiç bir fark yok.

Implementation'a kadar olan kısmı, unit'i eklediğiniz heryerde görüp kullanabilirsiniz.

Kolay gelsin..

Edit
Yanlış hatırlamıyorsam tavsiye edilen yazım şekli şudur:

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs;

  procedure DigerUnitlerdeKullanilacakProc(A: String);
  procedure Proc2(A: String);

  function BuDaFonksiyon: Integer;//Aradaki boşluğa dikkat

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


const
  Sabit1 = 5;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure DigerUnitlerdeKullanilacakProc(A: String);
begin

end;//DigerUnitlerdeKullanillacakProc

procedure Proc2;
begin

end;//Proc2

function BuDaFonksiyon: Integer;
begin

end;//BuDaFonksiyon

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Class'ın fonksiyonlarını yamadan önce { ClassAdi } satırını eklemek de yazılı olmayan kurallar arasında...
end;

end.
Cevapla