Calisma esnasinda Blesen olusturmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Calisma esnasinda Blesen olusturmak
Selamun Aleyküm arkadaslar
Ben program calisirken form üzerine blesen olusturmak istiyorum
mesela benim bir klasörüm var ve icinde 3 5 yada 10 tane resimim var
kac tane resim var ise o kadar image bleseni olusturmak istiyorum nasil yapabilirim
Saygilar dilerim
Ben program calisirken form üzerine blesen olusturmak istiyorum
mesela benim bir klasörüm var ve icinde 3 5 yada 10 tane resimim var
kac tane resim var ise o kadar image bleseni olusturmak istiyorum nasil yapabilirim
Saygilar dilerim
- greenegitim
- Üye
- Mesajlar: 713
- Kayıt: 28 Nis 2011 10:33
- Konum: İstanbul
Re: Calisma esnasinda Blesen olusturmak
Eyvallah cok yardimci oldu
Re: Calisma esnasinda Blesen olusturmak
Arkadasim cok yardimci oldu sagolasin
yanliz bir yerde daha takildim
calisma esnasinda image blesenini olusturuyorum üzerinede Button blesenini, button bleseninin clik olayina
kod yazmam lazim aslinda yazabiliyorum ama ben tikladigim zaman calismasi lazim buttun olusturulurken
click olayinin icindeki kod calisiyor bana lazim oldugunda degil. nasil cözebilirim?
simdiden tesekkürler
yanliz bir yerde daha takildim
calisma esnasinda image blesenini olusturuyorum üzerinede Button blesenini, button bleseninin clik olayina
kod yazmam lazim aslinda yazabiliyorum ama ben tikladigim zaman calismasi lazim buttun olusturulurken
click olayinin icindeki kod calisiyor bana lazim oldugunda degil. nasil cözebilirim?
simdiden tesekkürler
Re: Calisma esnasinda Blesen olusturmak
Merhaba, Mevcut kodu paylaşabilirseniz üzerinde düzenleyelim.
Re: Calisma esnasinda Blesen olusturmak
Tabiki paylasmak güzeldir
procedure TSiparisFrm.FormCreate(Sender: TObject);
Var
Dosya:TSearchRec;
ResimAdedi:Byte;
Ustuzaklik, Soluzaklik:Integer;
img: array of TImage;
edt: array of TEdit;
Btn: array of TButton;
begin
Ustuzaklik:=8;
Soluzaklik:=8;
ResimAdedi:=0;
SetLength(img,10);
SetLength(edt,10);
SetLength(Btn,10);
if FindFirst('D:\install\Treiber\*.jpeg',faAnyFile,Dosya)=0 Then //KLASÖRÜN ICINDEKI ILK RESIM DOSYASININ ADINI DOSYA DEGISKENINE AKTARIP BASLATIYORUZ
Begin
Repeat
ResimAdedi:=ResimAdedi+1; //KAC TANE RESIM OLDUGUNU BULMAK ICIN
ListBox1.Items.Add(Dosya.Name); //RESIM ADLARINI LISTBOXA AKTARIYORUM KONTROL AMACLI ASLINDA LAZIM DEGIL
img[ResimAdedi]:=TImage.Create(SiparisFrm); //IMAGE OLUSTURULUYOR
img[ResimAdedi].Stretch:=True;
edt[ResimAdedi]:=TEdit.Create(img[Resimadedi]); //EDIT OLUSTURULUYOR
Btn[ResimAdedi]:=TButton.Create(img[ResimAdedi]); //BTON OLUSTURULUYOR
With edt[ResimAdedi] do Begin //EDITIN ÖZELLIKLERI
Width:=60;
Height:=25;
Font.Color:=clRed;
left:=Soluzaklik+200;
Top:=Ustuzaklik+150;
Parent:=Self;
End;
With Btn[ResimAdedi] do Begin //BUTONUN ÖZELLIKLERI SORUN BURADA OLUSUYOR CLICK OLAYI BEN TIKLADIGIM ZAMAN DEGILDE RUNTIMEDE DEVREYE GIRIYOR
Width:=60;
Height:=25;
left:=Soluzaklik+200;
Top:=Ustuzaklik+170;
Caption:='EKLE';
Btn[ResimAdedi].Click;
Begin
Btn[ResimAdedi].Caption:='BURADA PROGRAM CALISTIKTAN SONRA BEN TIKLADIGIMDA CAPTIONUN DEGISMESINI ISTIYORUM AMA BASLANGICDA DEGISIYOR';
End;
Parent:=Self;
End;
With img[ResimAdedi] do Begin //IMAGENIN ÖZELLIKLERI
Width:=270;
Height:=200;
Left:=Soluzaklik;
Top:=Ustuzaklik;
Picture.LoadFromFile('D:\install\Treiber\'+Dosya.Name); //OLUSTURULAN IMAGE YE RESIM YÜKLENIYOR
Parent:=Self;
End;
if Soluzaklik<540 then
Begin
Soluzaklik:=Soluzaklik+282;
end
else
Begin
Ustuzaklik:=Ustuzaklik+208;
Soluzaklik:=8;
end;
until FindNext(Dosya)<>0; //DOSYALAR BITENE KADAR DEVAM
FindClose(Dosya);
Label1.Caption:=IntToStr(ResimAdedi);
end;
end;
procedure TSiparisFrm.FormCreate(Sender: TObject);
Var
Dosya:TSearchRec;
ResimAdedi:Byte;
Ustuzaklik, Soluzaklik:Integer;
img: array of TImage;
edt: array of TEdit;
Btn: array of TButton;
begin
Ustuzaklik:=8;
Soluzaklik:=8;
ResimAdedi:=0;
SetLength(img,10);
SetLength(edt,10);
SetLength(Btn,10);
if FindFirst('D:\install\Treiber\*.jpeg',faAnyFile,Dosya)=0 Then //KLASÖRÜN ICINDEKI ILK RESIM DOSYASININ ADINI DOSYA DEGISKENINE AKTARIP BASLATIYORUZ
Begin
Repeat
ResimAdedi:=ResimAdedi+1; //KAC TANE RESIM OLDUGUNU BULMAK ICIN
ListBox1.Items.Add(Dosya.Name); //RESIM ADLARINI LISTBOXA AKTARIYORUM KONTROL AMACLI ASLINDA LAZIM DEGIL
img[ResimAdedi]:=TImage.Create(SiparisFrm); //IMAGE OLUSTURULUYOR
img[ResimAdedi].Stretch:=True;
edt[ResimAdedi]:=TEdit.Create(img[Resimadedi]); //EDIT OLUSTURULUYOR
Btn[ResimAdedi]:=TButton.Create(img[ResimAdedi]); //BTON OLUSTURULUYOR
With edt[ResimAdedi] do Begin //EDITIN ÖZELLIKLERI
Width:=60;
Height:=25;
Font.Color:=clRed;
left:=Soluzaklik+200;
Top:=Ustuzaklik+150;
Parent:=Self;
End;
With Btn[ResimAdedi] do Begin //BUTONUN ÖZELLIKLERI SORUN BURADA OLUSUYOR CLICK OLAYI BEN TIKLADIGIM ZAMAN DEGILDE RUNTIMEDE DEVREYE GIRIYOR
Width:=60;
Height:=25;
left:=Soluzaklik+200;
Top:=Ustuzaklik+170;
Caption:='EKLE';
Btn[ResimAdedi].Click;
Begin
Btn[ResimAdedi].Caption:='BURADA PROGRAM CALISTIKTAN SONRA BEN TIKLADIGIMDA CAPTIONUN DEGISMESINI ISTIYORUM AMA BASLANGICDA DEGISIYOR';
End;
Parent:=Self;
End;
With img[ResimAdedi] do Begin //IMAGENIN ÖZELLIKLERI
Width:=270;
Height:=200;
Left:=Soluzaklik;
Top:=Ustuzaklik;
Picture.LoadFromFile('D:\install\Treiber\'+Dosya.Name); //OLUSTURULAN IMAGE YE RESIM YÜKLENIYOR
Parent:=Self;
End;
if Soluzaklik<540 then
Begin
Soluzaklik:=Soluzaklik+282;
end
else
Begin
Ustuzaklik:=Ustuzaklik+208;
Soluzaklik:=8;
end;
until FindNext(Dosya)<>0; //DOSYALAR BITENE KADAR DEVAM
FindClose(Dosya);
Label1.Caption:=IntToStr(ResimAdedi);
end;
end;
Re: Calisma esnasinda Blesen olusturmak
Öncelikle gönderdiğiniz kod okunabilirlik açısından çok zor. "blok" olarak ifade ettiğim begin..end arasında kalan kısımlar en az iki karakter içeriden yazılmadığı için ilk bakışta kod akışını izlemek hele ki böyle bir miktar uzun kodlarda pek mümkün olmuyor. Kod yazarken "blok" şeklinde yazmaya özen göstermekte birçok faydalar vardır.
Paylaşılan kod "blok" şeklinde düzenlendiği zaman aşağıdaki kısımda ekstradan gereksiz bir begin..end kullanıldığı da ortaya çıkıyor. Btn[ResimAdedi].Click; satırının altındaki begin..end bloğu gereksiz olarak eklenmiş.
Optimizasyon anlamında ResimAdedi değişkeni tanımlamanıza gerek yok. Zira ListBox1.Items.Count sizin resim adedi bilginizi içeriyor olacaktır.
Sorunuzun cevabına gelince. Öncelikle form içinde tıklama yapıldığı zaman kullanılacak prosedür hazırlanır.
Manuel eklenen prosedürün kendisi:
Ardından dinamik olarak oluşturulan butonlar için OnClick() olayına elle oluşturduğumuz prosedürü tanımlarız.
Paylaşılan kod "blok" şeklinde düzenlendiği zaman aşağıdaki kısımda ekstradan gereksiz bir begin..end kullanıldığı da ortaya çıkıyor. Btn[ResimAdedi].Click; satırının altındaki begin..end bloğu gereksiz olarak eklenmiş.
Kod: Tümünü seç
With Btn[ResimAdedi] do
Begin //BUTONUN ÖZELLIKLERI SORUN BURADA OLUSUYOR CLICK OLAYI BEN TIKLADIGIM ZAMAN DEGILDE RUNTIMEDE DEVREYE GIRIYOR
Width := 60;
Height := 25;
Left := Soluzaklik + 200;
Top := Ustuzaklik + 170;
Caption := 'EKLE';
Btn[ResimAdedi].Click;
Begin
Btn[ResimAdedi].Caption := 'BURADA PROGRAM CALISTIKTAN SONRA BEN TIKLADIGIMDA CAPTIONUN DEGISMESINI ISTIYORUM AMA BASLANGICDA DEGISIYOR';
End;
Parent := Self;
End;
Sorunuzun cevabına gelince. Öncelikle form içinde tıklama yapıldığı zaman kullanılacak prosedür hazırlanır.
Kod: Tümünü seç
type
TSiparisFrm = class(TForm)
procedure FormCreate(Sender: TObject);
procedure MyButtonClick(Sender: TObject); // <-- Manuel eklenen prosedür tanımı
private
{ Private declarations }
public
{ Public declarations }
end;
Kod: Tümünü seç
procedure TSiparisFrm.MyButtonClick(Sender: TObject);
var
Btn: TButton;
begin
Btn := TButton(Sender);
Btn.Caption := 'tıklanan: ' + IntToStr(Btn.Tag);
end;
Kod: Tümünü seç
With Btn[ResimAdedi] do
Begin //BUTONUN ÖZELLIKLERI SORUN BURADA OLUSUYOR CLICK OLAYI BEN TIKLADIGIM ZAMAN DEGILDE RUNTIMEDE DEVREYE GIRIYOR
Width := 60;
Height := 25;
Left := Soluzaklik + 200;
Top := Ustuzaklik + 170;
Caption := 'EKLE';
Btn[ResimAdedi].Caption := 'Beni Tıkla';
Btn[ResimAdedi].OnClick := MyButtonClick; // <--- Prosedür atamasının yapıldığı yer.
Parent := Self;
End;
Re: Calisma esnasinda Blesen olusturmak
Arkadasim cok sagolasin verdigin bilgiler cok isime yaradi sorunu da cözdüm
fakat form üzerine birden cok buttun yerlestirmem lazim her butonun da farkli farkli islevleri olmasi lazim bu sekilde hepsi ayni yaniti veriyor
farkli bir yol bulmam lazim
fakat form üzerine birden cok buttun yerlestirmem lazim her butonun da farkli farkli islevleri olmasi lazim bu sekilde hepsi ayni yaniti veriyor
farkli bir yol bulmam lazim
Re: Calisma esnasinda Blesen olusturmak
Üzerine biraz dşününce çözümü bulabilirsiniz aslında. İlk oluşturulduğu zaman TAG değerlerini kullanmıştık. Bu TAG değerlerine göre kontroller yaparak ne yapılacağını tek bir kod içinde veya bu kod içinden farklı prosedür/fonksiyonlara atıfta bulunarak çözebilirsiniz diye düşünüyorum.
Çok basit bir örnek:
Çok basit bir örnek:
Kod: Tümünü seç
procedure TSiparisFrm.MyButtonClick(Sender: TObject);
var
Btn: TButton;
begin
Btn := TButton(Sender);
case Btn.Tag of
1: Btn.Caption := 'tıklanan: ' + IntToStr(Btn.Tag);
2: Btn.Caption := 'bu buton 2 numara';
3: Btn.Width := 50;
4: Btn.Height := 100;
5: DisplayGraph(); // Başka prosedür kullanım örneği
99: Application.Terminate();
end;
end;