create edilen label ile sürükle bırak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
espasem
Üye
Mesajlar: 55
Kayıt: 05 May 2005 01:37
Konum: KOCAELİ

create edilen label ile sürükle bırak

Mesaj gönderen espasem »

arkadaşlar, benim sorum program açılırken bir dosya içerisindeki verilere göre label ları oluşturuyorum. fakat daha sonra bu labellar ile ilegili işlem yapmak istiyorum. yani bu labelların evenst larını kullanmam gerekiyor.

örn; sürükle bırak yapmak istiyorum. bunu nasıl sağlarım ? yani kodu nereye yazmam gerek li?

yardımlarını ziçin teşekkürler...
Kod yazmaya devam...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
önce kullanacağın procedureleri hazırlayackasın. sonra duruma göre kullanmak istediğin procedureleri ilgili labelların olaylarına atayacaksın.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
espasem
Üye
Mesajlar: 55
Kayıt: 05 May 2005 01:37
Konum: KOCAELİ

Mesaj gönderen espasem »

tamam da benim sorunum her bir oluşan labelin eventslarına nasıl ulaşacağım? örneğin Click olayını nasıl yazacağım ki? bu labellar görsel olarak değil kodla oluşturuluyor.
Kod yazmaya devam...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

:D
forma bir tane label koy. onclickine istediğin olayı yaz sonra labeli sil.
procedureyi oluşturduk.(atıyorum procedurenin adi hebelhubele olsun:)
dinamik label oluşturuyorsun label oluşturuken onclick eventine yazdığın procedureye atayacaksın

Kod: Tümünü seç

...
mylbls:array of tlabel;
....
mylbls create ediliyor
.....
mylbls[i].onclick:=hebelehubele;
.....
böyle bişey olması lazım
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
espasem
Üye
Mesajlar: 55
Kayıt: 05 May 2005 01:37
Konum: KOCAELİ

Mesaj gönderen espasem »

denedim fakat olmuyor, hata veriyor...

E2010 Incompatible types: 'TLabel' and 'Integer'

elinizde varsa örnek verebilir misiniz?
Kod yazmaya devam...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

integer bir değeri tlabel tipindeki bir değişkene atmaya çalışmışsın.
sen hata veren yerleri gönderde bi bakalım.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
espasem
Üye
Mesajlar: 55
Kayıt: 05 May 2005 01:37
Konum: KOCAELİ

Mesaj gönderen espasem »

fonksiyonum bu çok basit aslında aslında,
ilgili labelin.dragover ının bunu kullanmasını istiyorum.

Kod: Tümünü seç

function mausemove(labe:tlabel;x,y:integer) : boolean;
begin
  labe.Left := x;
  labe.Top := y;
end;
kullanırkende böyle kullanıyorum.

Kod: Tümünü seç

lab.OnDragOver := mausemove(lab,bitx,bity);
Kod yazmaya devam...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

aslangeri yazdı:forma bir tane label koy. onclickine istediğin olayı yaz sonra labeli sil.
ondragover proceduresinin yapısı öyle olmazki?

Kod: Tümünü seç

mousemove(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean)
şeklinde tanımlaman lazım.
atamayıda

Kod: Tümünü seç

lab.OnDragOver := mausemove;
şeklinde yapman lazım.
:wink:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
espasem
Üye
Mesajlar: 55
Kayıt: 05 May 2005 01:37
Konum: KOCAELİ

Mesaj gönderen espasem »

tamam yaptım hata da vermedi. fakat gelelim başa istediğim tam olarak olmadı. ben sonradan oluşturulan labelları sürükle bırak yapmak istiyorum. Dragover olayını kullanırken hangi labelı sürüklerse onun left ve top özelliklerinin değişmesi gerekiyor. hangi labela tıklandığı bir şekilde öğrenmem gerekiyor sanırım.

Kod: Tümünü seç

procedure tmain.mousemove(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
lab1.left := x;
lab1.top := y;
end;
end;
gibi bir şey

yazdığım tüm kodu göndereyim.

Kod: Tümünü seç

procedure Tmain.btnSelectDirClick(Sender: TObject);
var
s,hedef,kaynak,a,name:string;
txt :textfile;
i,c: integer;
labe : array of tlabel;
begin

  if SelectDirectory('Proje Klasörünü Seçiniz', '', s) then
  begin
    path.Text := s;
    kaynak := s + '\io\analoginput';
    hedef := 'c:\YEDEK\analoginput.txt';
    copyfile(pchar(kaynak),pchar(hedef),false);
    listbox1.items.LoadFromFile('c:\YEDEK\analoginput.txt');

    kaynak := s + '\io\analogoutput';
    hedef := 'c:\YEDEK\analogoutput.txt';
    copyfile(pchar(kaynak),pchar(hedef),false);
    listbox2.items.LoadFromFile('c:\YEDEK\analogoutput.txt');

    setlength(labe,listbox1.items.Count + listbox2.items.Count);

    for I := 0 to listbox1.items.Count - 1 do
    begin
       a := copy(listbox1.items[i],pos('"',listbox1.items[i]) + 1,length(listbox1.items[i]));
       a := copy (a,0,pos('"',a)-1);
       labe[i] := tlabel.Create(panel1);
       //name := StringReplace( a , ' ', '_',[rfReplaceAll, rfIgnoreCase]);
       labelanalogcreate(labe[i],a,panel1,i * 15,1);
    end;
    c:= listbox1.items.Count;
    listbox1.items.Clear;
    for I := 0 to listbox2.items.Count - 1 do
    begin
        a := copy(listbox2.items[i],pos('"',listbox2.items[i]) + 1,length(listbox2.items[i]));
        a := copy (a,0,pos('"',a)-1);
        labe[c+i] := tlabel.Create(panel1);

        //name := StringReplace( a , ' ', '_',[rfReplaceAll, rfIgnoreCase]);
        labelanalogcreate(labe[c+i],a,panel1,(C+i) * 15,2);
    end;

  end;
end;

procedure tmain.labelanalogcreate(lab : tlabel;cap: string; panel : tpanel;labtop: integer; b: integer);
begin
        lab.Parent := panel;
        lab.Caption := cap + lab.Name;
        lab.Left := 10;
        lab.Top := labtop;
        if b = 1 then lab.color := clyellow;
        if b = 2 then lab.color := claqua;
        lab.DragMode := dmAutomatic;
        lab.WordWrap := True;
        lab.OnDragOver := mousemove;

end;

Kod yazmaya devam...
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 »

Önce

Kod: Tümünü seç

procedure tmain.lblMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const SC_DRAGMOVE = $F012;
begin
  if Button = mbleft then begin
    ReleaseCapture;
    TLabel(Sender).Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
  end;
end;
şeklinde bir prosedür oluştur ve daha sonra da Label nesnelerini oluşturduğun kodların olduğu bölümde oluşan Lable nesnesinin lab.onMouseDown:=lblMouseDown;şeklinde onMoseDown olayına atama yaparsan, bu Label bileşenlerini fare ile istediğin yere sürükleyip taşıyabilirsin.

Not:Bileşen taşıma başka bir olay, sürükle bırak ise bambaşka bir olaydır. Burada sürükle bırakmaktan kasıt bir bileşenin içeriğini başka bileşene taşımaktır. Bileşen taşıma olayı ise o bileşenin koordinatlarını değiştirmektir. Soruyu doğru anlamadığımdan cevap ta biraz gecikti normal olarak.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
espasem
Üye
Mesajlar: 55
Kayıt: 05 May 2005 01:37
Konum: KOCAELİ

Mesaj gönderen espasem »

çok teşekkür ederim. bu işimi gördü. sağolun;
fakat label ile olmadı. button ile oluyor. yardımlarınız için teşekkürler..
:lol:
Kod yazmaya devam...
Cevapla