Form larla İlgili

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Form larla İlgili

Mesaj gönderen vedatkaba »

Selaminaleyküm Forumdaki kardeşlerim.Hepinize kolay gelsin.

Benim problemim şöyle....Şimdi form1 var form2 var ikiside aynı anda çalışacak. Form1 üstte form2 onun hemen altında olacak ve form1 in başlığından tutup sürükleyerek götürdüğümüz zaman form2 de form1 den ayrılmadan takip edecek.Bunu nasıl yapabilirim.

yani winamp sistemi var ya aynen onuun gibi...

Çok teşekkürlerimi sunarım
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

Gönderdiğim bu kodda iki tane form var (form1. form2) içinde hiç bir eleman koymadım.

form1. in onshow olayına form2.show ekledim.
onposchange diye bir procedure tanımladım. form1 i tutup taşıdığında form2 de taşınıcaktır.

burdaki 250 değeri form1 in yüksekliğini gösteriyor.

Kod: Tümünü seç

      form2.Top:=top+250;
formhazir boolean değişkeni form1, form2 oluşmadan üzerinde işlem yapmaya çalışacağı için hata vericektir. bunu engellemek için ekledim.

Kod: Tümünü seç

      form2.Top:=top+250;

iyi çalışmalar.

Kod: Tümünü seç

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure OnPosChange(var Msg: TWmWindowPosChanging); message
      WM_WINDOWPOSCHANGING;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  formhazir:boolean;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.OnPosChange(var Msg: TWmWindowPosChanging);
begin
  if formhazir then
  begin
      form2.Top:=top+250;
      form2.left:=left;

  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  form2.show;
  formhazir:=true;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  form2.Close;
end;

end.
[/code]
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Bu iş tamam

Mesaj gönderen vedatkaba »

İlk önce teşekkürlerimi sunarım.

Verdiğiniz kodla problem halloldu.Peki form2 nin başlığından tutarak form1 den bağımsız başka bir yere taşımak için ne yapmak gerekir.ve daha sonra yine form2 nin altına alarak tekrar beraber hareket ettirebiliriz.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

Kodları bu şekilde düzenledim. Bir problemimiz var. Problem form1 i hızlı bir şekilde hareket ettirirsen. form2 form1 e yetişemiyor :)

form1'i yavaş hareket ettirirsen istediğin şeyleri yapabilirsin. Burdaki mantık form2 nin ust kısmının form1 in alanı içinde ise taşıyor değil ise form2 serbest hareket ediyor.

Aşağıda unit1.pas ın içeriğini görebilirsiniz.

iyi çalışmalar.




Bu bölümde +50,-50 form2 nin form1 in bittiği noktadaki dikey aralığı
+20,-20 form2 nin form1 in sol taraftaki konumunun yatay aralığı.

form2 bu aralıktaki bir konuma denk gelirse form1 in kontorlüaltına girer.
Bu alanın dışında olursa başına buyruk hareket eder.

Kod: Tümünü seç

    if (form2ust<form1ust+form1boy+50) and (form2ust>form1ust+form1boy-50) then
     begin
       if (form2sol<form1sol+20) and (form2sol>form1sol-20) then
       begin
          form2.Top:=form1.top+250;
          form2.left:=form1.left;
       end;
     end;
 

Kod: Tümünü seç


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private declarations }
    procedure OnPosChange(var Msg: TWmWindowPosChanging); message  WM_WINDOWPOSCHANGING;

  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  formhazir:boolean;
  form1ust,form1sol,form1boy,form2ust,form2sol:integer;

implementation

uses Unit2;

{$R *.dfm}

procedure tform1.OnPosChange(var Msg: TWmWindowPosChanging);
begin
  form1ust:=form1.top;
  form1sol:=form1.left;
  form1boy:=form1.height;

  if formhazir then
  begin
    form2ust:=form2.top;
    form2sol:=form2.left;
  end;

  if form1.Active then
  if formhazir then
  begin
     if (form2ust<form1ust+form1boy+50) and (form2ust>form1ust+form1boy-50) then
     begin
       if (form2sol<form1sol+20) and (form2sol>form1sol-20) then
       begin
          form2.Top:=form1.top+250;
          form2.left:=form1.left;
       end;
     end;
  end;

end;

procedure TForm1.FormShow(Sender: TObject);
begin
  form2.show;
  formhazir:=true;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  form2.Close;
end;

end.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Cevapla