Dinamik Oluşturulan Formu Taşımak Hk;

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Dinamik Oluşturulan Formu Taşımak Hk;

Mesaj gönderen G.Arkas »

Merhaba arkadaşlar;

Uygulama da dinamik oluşturulan formlarım var. Bu formlar her defasında birden fazla defa oluşturulmak üzere tasarlandı.

Kod: Tümünü seç

var
  TaskF :TfControl;
   i:integer;
begin
for i := 0 to lv1.Items.Count -1 do begin
  if lv1.Items.Item[i].Selected then begin
  sleep(10);
    if lv1.Items.Item[i].SubItems.Objects[2] = nil then begin
      TaskF := TfControl.Create(self);
      lv1.Items.Item[i].SubItems.Objects[2] := TaskF ;
      TaskF .Show;
    end else begin
    TfControl(lv1.Items.Item[i].SubItems.Objects[2]).Show;
    end;
  end;
end;
Yukarıda ki kod ListView kontrolünde seçtiğim öğe kadar önceden tasarlanmış formu dinamik olarak oluşturuyor. Burada 2. Form (fControl) BorderStyle özelliği bsNone. Pencerenin caption'ı olmadığı için aşağıda ki kod ile taşınmasını sağlıyorum.

Kod: Tümünü seç

  ReleaseCapture;
  fControl.perform(WM_SYSCOMMAND, $F012, 0);
Form dinamik olarak oluşturulduğundan MouseDown olayını tanıyamıyor ve form taşınamıyor. Bende kendi olayımı kendim tasarlayıp fControl formunun OnCreate olayına ekliyorum.

Kendi olayım.

Kod: Tümünü seç

procedure TfControl.FormControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  fControl.perform(WM_SYSCOMMAND, $F012, 0);
end;
Create anında tanımlanma şekli.

Kod: Tümünü seç

procedure TfControl.FormCreate(Sender: TObject);
begin
  fControl.OnMouseDown :=  FormControlMouseDown;
end;
Fakat form yine de taşınamıyor. Ekranın ortasında kalakalıyor. Nerede hata yapıyorum acaba?

İyi çalışmalar.
Resim
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Dinamik Oluşturulan Formu Taşımak Hk;

Mesaj gönderen SimaWB »

Formunu dinamik oluşturduğun için TfControl'ün üniti içinde

Kod: Tümünü seç

var
   fControl: TfControl;
global değişkeni artık senin işine yaramaz. Hatta o satırı silersen daha iyi olur. Dolayısıyla sen TfControl'un Event'lerini yazarken fControl değil Self kullanmalısın:

Kod: Tümünü seç

procedure TfControl.FormControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  Self.Perform(WM_SYSCOMMAND, $F012, 0);
end;

procedure TfControl.FormCreate(Sender: TObject);
begin
  Self.OnMouseDown :=  FormControlMouseDown;
end;
There's no place like 127.0.0.1
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Dinamik Oluşturulan Formu Taşımak Hk;

Mesaj gönderen G.Arkas »

@SimaWB çok teşekkür ederim cevap için. Oruç başıma vurdu farkedemedim. O formu sonradan çevirmiştim dolayısıyla düzeltememişim. Hakkını helal et. İyi çalışmalar...
Resim
Cevapla