Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

ÖNEMLİ AÇIKLAMA: MUTLAKA OKUYUNUZ!

Gönderen Konu: MSN tarzı PopUp form - İp Ucu  (Okunma sayısı 2021 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı ZoRan

  • Kıdemli Üye
  • *****
  • İleti: 115
  • Rep: +1/-0
  • Cinsiyet: Bay
    • Proton Yazılım
MSN tarzı PopUp form - İp Ucu
« : 01 Aralık 2009 11:54:35 »
Programınıza Msn Tarzı PopUp form koymak isteyebilirsiniz, belkide istemezsiniz ama ben genede size bir ip ucu vereyim hemde çok hoş ve basit ayrıca kapanırkende şeffaflaşarak görünmez oluyor. Sanki msn deki bu sistemi ben yapmışım gibi  :::)

Programınızı bir form ekleyin ve formun adını msnpop koyun isim önemli değil benim örnekte formun adı msnpop olduğu için bu ismi koyun dedim.
1. Forma 3 tane timer koyun
   Timerlere şu isimleri verin ve süreleri burdaki gibi yapın.
   yukari : 25
   asagi : 25
  kapat :3600
2. Timerlerin enable değerini false yapın


Kod: Delphi
  1.  
  2.  
  3. procedure Tmsnpop.asagiTimer(Sender: TObject);
  4. begin
  5. msnpop.Top:=msnpop.Top+3;
  6. msnpop.AlphaBlendValue:=msnpop.AlphaBlendValue-2;
  7. if msnpop.Top >= screen.Height then begin
  8.    msnpop.Close;
  9. end;
  10.  
  11.  
  12. end;
  13.  
  14. procedure Tmsnpop.KapatTimer(Sender: TObject);
  15. begin
  16. asagi.Enabled:=True;
  17. msnpop.AlphaBlend:=True;
  18. msnpop.AlphaBlendValue:=250;
  19. end;
  20.  
  21. procedure Tmsnpop.FormClick(Sender: TObject);
  22. begin
  23. msnpop.Close;
  24. end;
  25.  
  26. procedure Tmsnpop.FormShow(Sender: TObject);
  27. begin
  28.   msnpop.Top:=screen.Height;
  29.   msnpop.Left:=screen.Width - 210;
  30.   Yukari.Enabled:=True;
  31. end;
  32.  
  33. procedure Tmsnpop.YukariTimer(Sender: TObject);
  34. begin
  35. msnpop.Top:=msnpop.Top-3;
  36. if msnpop.Top<= screen.Height -( msnpop.Height + 30 )  then begin
  37.    Yukari.Enabled:=False;
  38.    beep;
  39.    kapat.Enabled:=True;
  40. end;
  41.  
  42. end;
  43.  
  44.  
  45.  

Burda size örnek verildi isterseniz siz forma bir resim koyarak daha görsel hale getirebilirsiniz. 
İmza Atmaya fırsat Bulmadım. En yakın zamanda atarız bir imza.

Çevrimdışı hayati

  • Administrator
  • *****
  • İleti: 860
  • Rep: +19/-3
  • Cinsiyet: Bay
Olsa dahi tenimin kıl biten her yeri bir dil, güçsüzüm şükretmeye,şükrüm binde bir bile değil (İ.R.)

Çevrimdışı ZoRan

  • Kıdemli Üye
  • *****
  • İleti: 115
  • Rep: +1/-0
  • Cinsiyet: Bay
    • Proton Yazılım
Ynt: MSN tarzı PopUp form - İp Ucu
« Yanıtla #2 : 01 Aralık 2009 15:29:04 »
AnimateWindow elbette var ancak benim kod otomatik pilot çalışıyor sürelere göre form kendi şeffaflaşarak kapanıyor ve formu StayOnTop yaparsanda en üstte açılıyor ve neyin nasıl yapıldığı görülüyor. Yediğin yemeği pişerken görmek gibi veya kendin pişirmek gibi bir şey. Konu başlığıda MSN tarzı denildiğen göre MSN Tarzına en yakınını bulmak lazım.
İmza Atmaya fırsat Bulmadım. En yakın zamanda atarız bir imza.

Çevrimdışı esteban®

  • Üye
  • ***
  • İleti: 41
  • Rep: +0/-0
Ynt: MSN tarzı PopUp form - İp Ucu
« Yanıtla #3 : 20 Şubat 2010 13:21:22 »
merhabalar öncelikle paylaşımınız için tşke derim kendi programımda sizin bu yönteminizi kullanıyorum lakin takıldığım bir nokta var ben butona bastığımda popun çıkmasını sağlıyorum butona bir kere basınca cıkıyor ama ikinciye üçünceye basınca cıkmıyr bir kere bastığımda cıkıyor bir daha cıkmıyor bu nasıl yaparım her butona bastığımda cıkmasını nasıl sağlarım bana bu konuda yardımcı olursanız cok sevinirim.

Çevrimdışı ZoRan

  • Kıdemli Üye
  • *****
  • İleti: 115
  • Rep: +1/-0
  • Cinsiyet: Bay
    • Proton Yazılım
Ynt: MSN tarzı PopUp form - İp Ucu
« Yanıtla #4 : 20 Şubat 2010 16:25:24 »
Formun OnShow olayında herşey başladığı için forma kapanınca her şey sıfırlanıdığına göre böyle birşey olmaması lazım ve bende olmuyor. Sen formu hafızadan silmiyorsan mutlaka timerler aktif kalıyor ve böylece formun top değeri timerde sürekli arttığı için  formun top'u monitörden aşağı iniyor yer altına geçiyor biraz da geç tıklanırsa taaa mağma tabakasına kadar iniyordur ve bir daha tıkladığında senin mönitürn altı taaa mağma tabakasına kadar inemediği için form gözükmüyordur. :)

Yukardaki kodları tekrar incele ve formuda herseferinde create et ve kapanışta sil. Yada kapanışta tüm timerleri kapatmayı unutma.

yani sen formu

      msnpop:=Tmsnpop.Create(Application);
      msnpop.ShowModal;
      msnpop.Free;

ben böyle yapıyorum yani formu kapanınca hafızadan siliyorum.
« Son Düzenleme: 20 Şubat 2010 16:38:13 by ZoRan »
İmza Atmaya fırsat Bulmadım. En yakın zamanda atarız bir imza.

Çevrimdışı esteban®

  • Üye
  • ***
  • İleti: 41
  • Rep: +0/-0
Ynt: MSN tarzı PopUp form - İp Ucu
« Yanıtla #5 : 20 Şubat 2010 16:41:37 »
böyle yaptım kardeş oldu lakin bu sefer arkada kalan formun yani showmodal; yapınca arkada kapan form işlemez hale geliyor show; yapınca olmuyor ama ben clike direk

msnpop.show; oalrak yapıyordum hem arkadaki formu pasifleştirmiyordu hemde alt köşede cıkıyordu lakin tkerar bastığımda cıkmaz oldu bu verdiğinde kodda cıkıyor tekrar basınca ama arka formu pasifleştiriyor.

Çevrimdışı ZoRan

  • Kıdemli Üye
  • *****
  • İleti: 115
  • Rep: +1/-0
  • Cinsiyet: Bay
    • Proton Yazılım
Ynt: MSN tarzı PopUp form - İp Ucu
« Yanıtla #6 : 20 Şubat 2010 16:55:39 »
ShowModal in özelliği kapanmadığı sürece diğer formaları aktif ettirmez ama bir faydasıda kendini diğer programların açık formaların arkasında bıraktırmaz normal show yaparsan ekranı kaplamış başka formun arkasında kalabilir açılıp kapanır ama kimse görmez.

//kendi programımdaki formu açan kod aşağıda timer randevuları kontrol ediyor ve saati gelen varsa
// formu açıyor, beep ediyor ve müzik tanımlanmışsa müziği çalmaya başlıyor. ve bir daha gösterilmemesi için işaret atıyor.

procedure TAnaform.RandevuKontrolTimer(Sender: TObject);
var
s:Ttime;
begin
s:=Time();
Data.Randevu.First;
while not Data.Randevu.Eof do begin
  if (Data.RandevuTARIH.Value=date()) and (s > strtoTime(Data.RandevuSAAT.Value) ) and ( Data.RandevuOKUNDU.Text='HAYIR') then begin
      RandevuKontrol.Enabled:=False;
      Data.Randevu.Edit;
      Data.RandevuOKUNDU.Value:='EVET';
      Data.Randevu.Post;
      Data.Baglanti.CommitRetaining;
      if (Data.RandevuMUZIK.Value<>'') and (fileExists(Data.RandevuMUZIK.Text))  then
          WinExec(Pchar('Mp3Player.Exe "'+Data.RandevuMUZIK.Text+'"'),sw_show)
       else
          PlaySound('alarm',hInstance,snd_resource or snd_async);

      msnpop:=Tmsnpop.Create(Application);
      msnpop.ShowModal;
      msnpop.Free;
      break;
  end;
  Data.Randevu.Next;
end;
RandevuKontrol.Enabled:=True;
end;


//////
// bunlarda benim formun tam kodları


procedure Tmsnpop.asagiTimer(Sender: TObject);
begin
msnpop.Top:=msnpop.Top+3;
msnpop.AlphaBlendValue:=msnpop.AlphaBlendValue-2;
if msnpop.Top >= screen.Height then begin
   msnpop.Close;
end;


end;

procedure Tmsnpop.KapatTimer(Sender: TObject);
begin
asagi.Enabled:=True;
msnpop.AlphaBlend:=True;
msnpop.AlphaBlendValue:=250;
end;

procedure Tmsnpop.FormCreate(Sender: TObject);
begin
ArkaPlan.Picture.Bitmap.LoadFromResourceID(HInstance,110);
end;

procedure Tmsnpop.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
msnpop.Close;
end;

procedure Tmsnpop.FormShow(Sender: TObject);
begin
mesaj.Caption:=Data.RandevuTARIH.asString+''#13#10''+ Data.RandevuSAAT.AsString+''#13#10''+Data.RandevuBASLIK.text;
msnpop.Top:=screen.Height;
msnpop.Left:=screen.Width -( msnpop.Width +20 );
Yukari.Enabled:=True;
end;

procedure Tmsnpop.YukariTimer(Sender: TObject);
begin
msnpop.Top:=msnpop.Top-3;
if msnpop.Top<= screen.Height -( msnpop.Height + 30 )  then begin
   Yukari.Enabled:=False;
   beep;
   kapat.Enabled:=True;
end;

end;
İmza Atmaya fırsat Bulmadım. En yakın zamanda atarız bir imza.

Çevrimdışı ZoRan

  • Kıdemli Üye
  • *****
  • İleti: 115
  • Rep: +1/-0
  • Cinsiyet: Bay
    • Proton Yazılım
Ynt: MSN tarzı PopUp form - İp Ucu
« Yanıtla #7 : 20 Şubat 2010 17:10:55 »
Merak edenler için Formu neden her seferinde create edip geri çıkışta hafızadan atıyorum paylaşmak istiyorum. Ben programcılığa 1991 de Dos ortamı ile başladım ve ozamanlar hafızalar 512 KB dı ve bu kadar hafızada büyük programlar yazmak çok büyük sıkıntıydı onun için şimdi DLL denilen şeyi ozamanlar OVERLAY ile harici OVL dosyaları ile yapardık. Sonra teknoloji geliştikçe windowslar  çıktı ama windoslarda da aynı sorun yaşandı dolayısı ile bizler de memory leri cimri kullanma alışkanlığı oluştu. Gereksiz formlar yapmama, programda ki tüm formları ve dosyaları hepsini birden açmama alışkanlığı oldu.
Yani her formu ve dosyayı gerektiği yerde açıp işi bitince kapatma alışkanlığı oldu bu benim yaşımdaki (46) tüm programcılarda vardır. Bunu faydaları nedir hafıza verimli kullanılır, diğer programlarada hafıza bırakılır, değişkenler çakışma, elektirik kesilirse kapalı dosyalardaki veriler güvende olur ve OUT OF MEMORY durumuna düşmezsiniz, programlar daha güvenli ve hızlı çalışır.
Programlarınızın EXE boyu ile bilgisayarın RAM dosyasını karşılaştırıp 2 mb exe 2 GB ramda okyanusta ki kayık gibikalır diye düşünmeyin windowslar zaten bencildir ve kaynakların çoğunu kendisi harcar, ayrıca açılan her dosya, index, form ve değişkenler ayrı ayrı hafıza harcar yani 2 mb bir exeniz içerde 20 dosya ve buınlara bağlı 20 index açıyorsa ve programda 30 form var ve program açılışında bütün formlar hafızaya alınıyorsa o okyanuz size yetmeyebilir. Zira windows çalışan her programa kaynakları eşit dağıtır yani RAM hafızayı çalışan tüm programlara  böler ve size de mesela 50 mb RAM kalırsa programınızın performansı düşer.
Sizlere tavsiyem veri tabanı uygulamalarında bu kriterlere dikkat edin.
İmza Atmaya fırsat Bulmadım. En yakın zamanda atarız bir imza.