Kodbank İndir

! CODEBANK 2012 !

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

ÖNEMLİ AÇIKLAMA: MUTLAKA OKUYUNUZ!

Gönderen Konu: application.messagebox kullanımı  (Okunma sayısı 3201 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.117
  • Rep: +51/-0
  • Cinsiyet: Bay
  • Falan filan ...
application.messagebox kullanımı
« : 30 Haziran 2009 11:34:27 »
Kütüphane : Forms

Orjinal Function :

Kod: Delphi
  1.  
  2. function TApplication.MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;
  3. var
  4.   ActiveWindow, TaskActiveWindow: HWnd;
  5.   WindowList: Pointer;
  6.   MBMonitor, AppMonitor: HMonitor;
  7.   MonInfo: TMonitorInfo;
  8.   Rect: TRect;
  9.   FocusState: TFocusState;
  10. begin
  11.   ActiveWindow := ActiveFormHandle;
  12.   if ActiveWindow = 0 then
  13.     TaskActiveWindow := Handle
  14.   else
  15.     TaskActiveWindow := ActiveWindow;
  16.   MBMonitor := MonitorFromWindow(ActiveWindow, MONITOR_DEFAULTTONEAREST);
  17.   AppMonitor := MonitorFromWindow(Handle, MONITOR_DEFAULTTONEAREST);
  18.   if MBMonitor <> AppMonitor then
  19.   begin
  20.     MonInfo.cbSize := Sizeof(TMonitorInfo);
  21.     GetMonitorInfo(MBMonitor, @MonInfo);
  22.     GetWindowRect(Handle, Rect);
  23.     SetWindowPos(Handle, 0,
  24.       MonInfo.rcMonitor.Left + ((MonInfo.rcMonitor.Right - MonInfo.rcMonitor.Left) div 2),
  25.       MonInfo.rcMonitor.Top + ((MonInfo.rcMonitor.Bottom - MonInfo.rcMonitor.Top) div 2),
  26.       0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);
  27.   end;
  28.   WindowList := DisableTaskWindows(ActiveWindow);
  29.   FocusState := SaveFocusState;
  30.   if UseRightToLeftReading then Flags := Flags or MB_RTLREADING;
  31.   try
  32.     Result := Windows.MessageBox(TaskActiveWindow, Text, Caption, Flags);
  33.   finally
  34.     if MBMonitor <> AppMonitor then
  35.       SetWindowPos(Handle, 0,
  36.         Rect.Left + ((Rect.Right - Rect.Left) div 2),
  37.         Rect.Top + ((Rect.Bottom - Rect.Top) div 2),
  38.         0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);
  39.     EnableTaskWindows(WindowList);
  40.     SetActiveWindow(ActiveWindow);
  41.     RestoreFocusState(FocusState);
  42.   end;
  43. end;
  44.  
  45.  

Parametreleri [ Buttonlar ]

->  MB_OK                             => Tamam
->  MB_OKCANCEL                 => Tamam - İptal
->  MB_ABORTRETRYIGNORE  => Bitir - Tekrar Dene - Yoksay
->  MB_YESNOCANCEL           => Evet - Hayır - İptal
->  MB_YESNO                       => Evet - Hayır
->  MB_RETRYCANCEL            => Tekar Dene - iptal


Parametreleri [ Iconlar ]
Delphi 2007 deki sıraya göre arkadaşlar delphi 7 de sanırım daha azdı :)

MB_ICONHAND
Önizleme:




MB_ICONQUESTION
Önizleme:




MB_ICONEXCLAMATION

Önizleme:




MB_ICONASTERISK
Önizleme:




MB_ICONWARNING

Önizleme:




MB_ICONERROR
Önizleme:




MB_ICONINFORMATION
Önizleme:




MB_ICONSTOP
Önizleme:




MB_ICONMASK
Kendi Seçtiğiniz bi icon



Kullanımı :

Kod: Delphi
  1.  
  2.  
  3.  Application.MessageBox('MESAJ' , 'BAŞLIK', BUTTONLAR or DİALOG ICONU);
  4.  
  5.  

öRNEK:

Kod: Delphi
  1.  
  2. Application.MessageBox('Değişiklikleri Kaydetmek İstiyormusunuz?','abc v1.0', MB_OKCANCEL or MB_ICONQUESTION);
  3.  
  4.  

Tıklanan Buttona Göre İşlem Yapmak:
Örnek:
Bir editör yaptınız ve editörde memo kullandığımızı varsayıyoruz.. ve diyoruz ki benim memo düzenlendiyse
form kapanırken bana kaydetmek isteyip istemediğimi sorsun...

formun onCloseQuery olayına aşağıdaki kodu yazmamız yeterli olucak...
Kod: Delphi
  1.  
  2.  if Memo1.Modified then  // memo düzenlendiyse ...
  3.   begin
  4.   // değişikliklerin kaydedilim kaydedilmeyeceğini sorsun
  5.    case Application.MessageBox('Değişiklikleri Kaydetmek İstiyormusunuz?','abc v1.0', MB_YESNO or MB_ICONQUESTION) of
  6.     IDYES:  // cevap evetse
  7.      begin
  8.        if SaveDialog1.Execute then  // save dialog penceresini çalıştırsın (çalıştırdıysa)
  9.       memo1.Lines.SaveToFile(SaveDialog1.FileName); // memo nun içindeki veriyi save dialogda seçilen yer ve isme kaydetsin
  10.      end;
  11.     IDNO : // hayır seçilirse ( kaydedilmesin )
  12.   // programın kapatılıp kapatılıcağını sorsun  
  13.         CASE Application.MessageBox('Programı Kapatmak İstediğinizden Eminmisiniz?','ABC V1.0', MB_YESNO or MB_ICONQUESTION) OF
  14.     IDYES : Application.Terminate; // cevap evetse programı sonlandırsın
  15.     IDNO  : abort; // hayır sa işlemi durdursun...
  16.  end;
  17.  end;
  18.   end;
  19.  
  20.  


Bazı Açıklamalar :


1 ) Konunun yazımı tamamen bana aittir... Yazıda eksik veya yanlış gördüğünüz yerleri lütfen söyleyiniz..

2 ) Bu yazı burdan ( ç )alınır gider başka sitelerde yayınlancak olursa adımı yazmayın ama www.delphidunyasi.net ten alıntıdır demenizi rica ediyorum..

3) resimlerden bazıları için "Yanlış yüklemiş galiba bunlardan bazıları birbirine benziyor" demeyin ben yapmadım delphi öyle yapmış bazılarının icon ları aynı.. çıkardıkları sesler farklı ....








« Son Düzenleme: 30 Haziran 2009 12:12:57 by barutali »



Amatör Küme Programcı

Çevrimdışı Opt2000

  • Global Moderatör
  • *****
  • İleti: 263
  • Rep: +9/-1
  • Cinsiyet: Bay
Ynt: application.messagebox kullanımı
« Yanıtla #1 : 30 Haziran 2009 12:06:51 »
Selam,

Kodda ufak bir hata var gibi geldi bana. Memo1'de değişiklik yapın ve programı kapatmaya çalışın. Programı kapatmak istiyor musunuz? diye sormayacak. Bunu bilerek yapmış olabilirsiniz. Eğer öyle ise bence bir mantık hatası var. Olması gereken, önce programı kapatmak istiyor musunuz diye sorması, daha sonra da eğer evet cevabı vermişse, değişiklikleri kaydetmek istiyor musunuz sorusunu sormalı. Ya da tam tersi, ama kullanıcı programı kapatmayacaksa niye kaydettirelim?

Önemli bir detay değil, ama ben illa en doğru kodu yazacağım diyorsanız, aşağıdaki gibi düşünmelisiniz.
Kod: [Seç]
Application.MessageBox('MESAJ' , 'BAŞLIK', BUTTONLAR or DİALOG ICONU);

Fark 3. parametrede + yerine or kullanımıdır. OR bu fonksiyonda + ile aynı şekilde çalıştığı için fark belli olmuyor, ama normalde yapılması gereken işlem toplama değil, OR işlemidir. Bu sadece takıntılı olanlar için geçerli (Mesela ben :) )

Kolay gelsin,
Bahadır Alkaç

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.117
  • Rep: +51/-0
  • Cinsiyet: Bay
  • Falan filan ...
Ynt: application.messagebox kullanımı
« Yanıtla #2 : 30 Haziran 2009 12:12:12 »
@Opt2000 hocam düzeltme yaptığınız için çok teşekkür ederim orda "or" kullanılabildiğini bilmiyordum. Alışkanlıktan gelme "+" koydum :D bu yüzden zaten bazı açıklamalar kısmında ilk seçenekte yanlış gördüğünüz yerleri lütfen belirtin diye söyledim mesajımı hemen düzenliyorum. Yeniden Teşekkür ederim sayenizde yeni birşey daha öğrenmiş oldum ve bu mesajı gören belkide birçok kişide benim gibi yeni öğrenmiş olcak :)
« Son Düzenleme: 30 Haziran 2009 12:13:49 by barutali »



Amatör Küme Programcı

Çevrimdışı aaron_1212

  • Yeni Üye
  • *
  • İleti: 2
  • Rep: +0/-0
Ynt: application.messagebox kullanımı
« Yanıtla #3 : 10 Aralık 2010 01:12:35 »
Hocam bir sorum olacaktı, Ben VT projemde Mesela Formumdaki DBeditlerden birine yanlışlıkla
bir veri girdim , DataNavigator ile başka kayda geçerken DBedite  yanlışlıkla girdiğim veri Veritabanına kaydolmakta (Kullandığım bileşenler interbase ibdataset, ibtable, ibtransaction,datasource)
Bunu engellemek için ne yapmalıyım, kendi çözümüm şöyleydi

Bunu ibdataset in after edit olayına yazmıştım malesef proje açılırken bu showmessage ekranı geliyor

var
  buttonSelected : Integer;
begin
  // Show a custom dialog
  buttonSelected := MessageDlg('Kaydı değiştirecekmisiniz?',mtCustom,
                              [mbYes,mbCancel], 0);

  // Show the button type selected
  if buttonSelected = mrYes    then
  begin
 ibtable1.Post;
   end;

  if buttonSelected = mrCancel then begin
 ibtable1.Cancel;
  end;