Sayfayı Yazdır | Pencereyi Kapat

Delphi de görsel ve dinamik menu oluşturmak

Nereden Yazdırıldığı: Datakent
Kategori: Diğer bölümler
Forum Adı: Borland Delphi
Forum Tanımlaması: Borland Delphi ile ilgili soru / sorun / paylaşım bölümü
URL: http://forum.datakent.com/forum_posts.asp?TID=1800
Tarih: 29.Nisan.2024 Saat 18:28


Konu: Delphi de görsel ve dinamik menu oluşturmak
Mesajı Yazan: bayramoglu_61
Konu: Delphi de görsel ve dinamik menu oluşturmak
Mesaj Tarihi: 09.Ekim.2009 Saat 14:46

Merhaba Murat abi , rica etsem kasa 7' nin giriş ekranında tasarladığın , o kadar kafa yormama rağmen çözemediğim o menu tarzı bi örnek yayınlarmısın Tongue




Cevaplar:
Mesajı Yazan: murat turan
Mesaj Tarihi: 09.Ekim.2009 Saat 23:15

merhaba,
kesik şekilde formları yapmak için şuana kadar iki tür yöntem kullandım. il kullandığın yöntem paint de çizimi yapıyordum ve yaparken x,y koordinatlarını not ediyordum. çizimi bmp olarak kayıt edip photoshop da renklendirme, kenarlık ayarları vs... gibi kısımları ayarlıyordum. paint'de elde ettiğim x,y koordinatlarını delphide form'u kesmek için kullanıyordum. ve form'a bir adet timage nesnesi koyup photoshop'da yapıp yüksek kaliteli JPEG olarak kayıt ettiğim veya bmp olarak kaydettiğim resim dosysını programın kök dizinine koyup form yükleme esnasında timage nesnesie yüklüyordum. haliyle koordinatlarda kodlama ile kesildiğinde resim kesikler dışında kalıyordu. resim üzerinde phoshop'da ayar yaparken çizim dışına taşırmıyordum ( dış gölge kullanmayacaksın )
çok fazla kesim içeren formlarda bu yöntem baya zor oluyor. düşün ki ince form kesimlerinde belki 100 üzeri x,y koordinatı kullanıyorsun. örnek vereyim;

procedure TForm1.FormClick(Sender: TObject);
var
i:array [1..14] of TPoint;
FH:THANDLE;
begin
 FH := Form1.Handle;

 i[1]:=Point(50,50);
 i[2]:=Point(250,50);
 i[3]:=Point(250,75);
 i[4]:=Point(130,75);
 i[5]:=Point(130,90);
 i[6]:=Point(64,90);
 i[7]:=Point(64,75);
 i[8]:=Point(50,75);
 i[9]:=Point(50,50);

 i[10]:=Point(50,90);
 i[11]:=Point(250,90);
 i[12]:=Point(250,200);
 i[13]:=Point(50,200);
 i[14]:=Point(50,90);

 SetWindowRgn(FH,CreatePolygonRgn(i,14,WINDING),True);
end;

yukarıda dediğim gibi bu çizimin sonucuda istinaden yapığım resim'i de form'a yüklüyorum.

bunun dışında form'u CreateRectRgn, CombineRgn ve DeleteObject fonksiyonları ilede biçebilirsin.
örnek doküman:
http://www.megaupload.com/?d=KWNP36CC - http://www.megaupload.com/?d=KWNP36CC


ayrıca delphi 2009'da bu işi sıfır kod ile yapan bir mekanizma var.
örnek: ziyah zemin üzerine bir resim yap, form'un transparan özelliğini True yap ve transparanColor'u clblack yap. form'a bir image nesnesi koy ve resim'i yükle. (siyah ayarladığımızdan resimde siyah for üzerine olmalı) projeyi çalıştır ve sonucu gör. bu özellik belki önceki sürümlerde de vardır fakat Delphi 7 de yoktu diye hatırlıyorum. delphi 2009'da gözüme çarptı.



-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil


Mesajı Yazan: bayramoglu_61
Mesaj Tarihi: 10.Ekim.2009 Saat 14:22

Cevap için teşekkürler, ama benim sorum formu biçme ile ilgili değildi. kasa 7 alfa sürümünde  ki animasyonlu menu yu kasdetmiştim.



Mesajı Yazan: turknetyazilim
Mesaj Tarihi: 11.Ekim.2009 Saat 16:56
Murat abi sen büyük insansın.Yazılım Geliştirmede üzerine tanımıyorum.Senin seviyene ne zaman ulaşıcam benSmile
 
Saygılar abi


-------------


Mesajı Yazan: murat turan
Mesaj Tarihi: 12.Ekim.2009 Saat 12:29

zamanla herşey olur ismail sonu olmayan bir iş bu yetmez hiçbir zaman. bayram oğlu yanlış anlamışım seni :) izah edeyim;

delphinin klasik nesneleri kullanımış öncelikle. kullanılan nesneler;
Form'a TCoolBar koy, bunun içinede TToolbar ekle, TMainMenu ile menüyü tasarla, ve TToolbar 'ın Menu özelliğini tMainMenu nesnene bağla. ve form'a tMainMenu ekleyince hemen form'un Menu özelliği bu nesneye yapışıyor. bu sebeple form'un menu özelliğini TMainMenu ekleme sonrası kaldır.


-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil


Mesajı Yazan: bayramoglu_61
Mesaj Tarihi: 12.Ekim.2009 Saat 13:47
Teşekkürler üstad deniyecem bunu ..


Mesajı Yazan: bayramoglu_61
Mesaj Tarihi: 12.Ekim.2009 Saat 14:54
Cry Murat abi ilk giriş ekranı yokmu kullanıcı girişi yaparken.Hani şirket işlemleri, kullanıcı işlemleri , diğer işlemler vs seceneklri var, birine tıklayınca ötekiler animasyonlu bi şekilde geciyor.Menu den kastım o kısım.umarım bu sefer doğru yere isabet etmişimdir :)


Mesajı Yazan: murat turan
Mesaj Tarihi: 14.Ekim.2009 Saat 01:04
:) bu defa tam isabet
orada klasik tshape, tlabel nesneleri var. bunun dışında özel bir nesne kullanılmamış.  left ve visible özellikleriyle for döngüsü kullanılarak ayarlama yapılmış.


-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil


Mesajı Yazan: bayramoglu_61
Mesaj Tarihi: 14.Ekim.2009 Saat 09:11

Evet bu sefer tam isabet :) . Aynı mantıkla bende yapmaya çalıştım ama seninki gibi estetik gecişi sağlayamadım.Üstünde uğraşıldığı belli ..



Mesajı Yazan: bayramoglu_61
Mesaj Tarihi: 19.Ekim.2009 Saat 17:20

Murat abi rica etsem bu konu hakkında küçük bir örnek koyarmısın?Ben şu şekilde yaptım ama geciş gözle görülmeycek kadar hızlı oluyor ;

 
var
i:integer;
begin
for  i:=0 to 159 do begin
shape1.Left:=shape1.Left+1;
label1.Left:=label1.Left+1;
shape2.Left:=Shape2.Left+1;
label2.Left:=label2.Left+1;
shape3.Left:=shape3.Left+1;
label3.Left:=label3.Left+1;
shape4.Left:=shape4.Left+1;
label4.Left:=label4.Left+1;
shape5.Left:=shape5.Left+1;
label5.Left:=label5.Left+1;
shape6.Left:=shape6.Left+1;
label6.Left:=label6.Left+1;
 
shape7.Left:=shape7.Left-1;
label7.Left:=label7.Left-1;
shape8.Left:=shape8.Left-1;
label8.Left:=label8.Left-1;
shape9.Left:=shape9.Left-1;
label9.Left:=label9.Left-1;

end;


Mesajı Yazan: murat turan
Mesaj Tarihi: 19.Ekim.2009 Saat 20:01
kardeş end; den hemen önce
sleep(1000);//ms cinsinden 1000 = 1 sn
application.proccessmessage;
 
bu işini görecektir. sleep komutu bir windows api sidir. duraksama yaratmak için kullanılır. çeşitli alternatifler vardır.


-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil


Mesajı Yazan: turknetyazilim
Mesaj Tarihi: 21.Ekim.2009 Saat 17:08
Murat abi bu yöntem çok güzel bir bir yöntem bulmuşsun.Ben bugün denedim.Oyun bile yapılabilir.Pişririk vsSmile

-------------


Mesajı Yazan: bayramoglu_61
Mesaj Tarihi: 22.Ekim.2009 Saat 10:41
Evet , dışardan bakınca sanki 3. parti bir bileşen ile yapılmış gibi dursa da özüne inince tamamen delphi nin en saf halindeki  kontrolleri ile yapıldığını görmek sevindirici. Ben şu tarz bir kullanımla istediğim sonucu aldım :
 
for  i:=0 to 250 do begin
if i mod 20 =2 then  begin
sleep(1);
application.ProcessMessages;
end;
 
shape1.Left:=shape1.Left+1;
label1.Left:=label1.Left+1;
shape2.Left:=Shape2.Left+1;
label2.Left:=label2.Left+1;
shape3.Left:=shape3.Left+1;
label3.Left:=label3.Left+1;
shape4.Left:=shape4.Left+1;
label4.Left:=label4.Left+1;
shape5.Left:=shape5.Left+1;
label5.Left:=label5.Left+1;
shape6.Left:=shape6.Left+1;
label6.Left:=label6.Left+1;
 
shape7.Left:=shape7.Left-1;
label7.Left:=label7.Left-1;
shape8.Left:=shape8.Left-1;
label8.Left:=label8.Left-1;
shape9.Left:=shape9.Left-1;
label9.Left:=label9.Left-1;
 
bir bileşen haline dönüştürülerek  pratik kullanım kazadırılabilir...



Sayfayı Yazdır | Pencereyi Kapat