create edilen label ile sürükle bırak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
create edilen label ile sürükle bırak
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...
ö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...

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;
.....
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
fonksiyonum bu çok basit aslında aslında,
ilgili labelin.dragover ının bunu kullanmasını istiyorum.
kullanırkende böyle kullanıyorum.
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;
Kod: Tümünü seç
lab.OnDragOver := mausemove(lab,bitx,bity);
Kod yazmaya devam...
ondragover proceduresinin yapısı öyle olmazki?aslangeri yazdı:forma bir tane label koy. onclickine istediğin olayı yaz sonra labeli sil.
Kod: Tümünü seç
mousemove(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean)
atamayıda
Kod: Tümünü seç
lab.OnDragOver := mausemove;

Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
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.
gibi bir şey
yazdığım tüm kodu göndereyim.
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;
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...
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Önceş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.
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;
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. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .