Component'in eklendiği formun event'larına kod eklemek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Component'in eklendiği formun event'larına kod eklemek

Mesaj gönderen ulu coder »

Selam.

Yazdığım bileşenin, eklendiği formun OnCreate, OnResize, OnPaint event'larına kod eklemek mümkün mü? Yani formun event'ına yazdığım kodlara component'ten ekleme yapılabilir mi?
(override gibi)
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

İyi günler;

Bir event bilindiği gibi sadece bir değer alabilir. onCreate:=FormCreate; gibi. Burada bileşenler oluşturulma ve yok edilme aşamasında değişik metotlarla bu işlem yapılabilir. Burada bileşen oluşturulmasının tesbit edilmesi işine yarar diye düşünüyorum.

Kod: Tümünü seç

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent,Operation);
  case Operation of
    opInsert:;
    opRemove:;
  end;
end;

end.
Burada Notification bişen yakalayıcısı .exe ilk çalışırken yakaladığı bileşenlerin hiç bir özelliği atanmamış olarak yakalar. Çünkü bileşenin özelliklerini ayarlamak için Create edilmesi gerekir ve bu Create anını yakalar. İhtiyacını karşılarmı bilmem ama konu üzerinde yazışmaya devam edilecek gibi duruyor. :D
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Cevabınız için teşekkürler.

Amacım, bileşeni forma ekledikten sonra formda hiç kod yazmamak olduğu için tam cevap olmadı. :oops:

Ben şu yöntemi bulmuştum:

Kod: Tümünü seç

//Bileşen unit'i

....

private 
  OldFormCreate: TNotifyEvent;
  
  procedure NewFormCreate(Sender: TObject);

....
public
  constructor Create(AOwner: TComponent); override;

....

constructor Create(AOwner: TComponent);
  var
    ParentForm: TForm;
begin
  inherited Create(AOwner);
  
  ParentForm := GetParentForm(Self);
  if Assigned(ParentForm.Create) then//Eğer create event'ı varsa (kod yazılmışsa)
  begin
    OldFormCreate := ParentForm.OnCreate;
    ParentForm.OnCreate := NewFormCreate;
  end;//if

end;//Create


procedure NewFormCreate(Sender: TObject);
begin
  OldFormCreate; //Formun Create event'ına yazılan kodları çalıştır.

  Hede;
  Hödö; //Benim kodlarımı da çalıştır.
end;//NewFormCreate
Şimdiki kodları delphi'de yazmadım, yazım hatası olabilir; amacım zaten kullandığım mantığı anlatmak.

Skin gibi bir şey hazırlamam için gerekliydi. Neyse ki ustam 'Bileşeni TPanel'den türetip, Align özelliğini alClient yapsan?' dedi ve bunlara gerek kalmadı :lol:

Kolay gele...
Cevapla