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

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

barutali

  • Global Moderatör
  • *****
  • Rep: +34/-0
  • Çevrimdışı Çevrimdışı
  • Cinsiyet: Bay
  • İleti: 1.152
  • Arkandan Bir Sigara Daha Yaktım ...
    • HerÅŸeyi bilen ÅŸey
application.messagebox kullanımı
« : 30 Haziran 2009 11:34:27 »

Kütüphane : Forms

Orjinal Function :

Kod: (delphi) [Seç]

function TApplication.MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;
var
  ActiveWindow, TaskActiveWindow: HWnd;
  WindowList: Pointer;
  MBMonitor, AppMonitor: HMonitor;
  MonInfo: TMonitorInfo;
  Rect: TRect;
  FocusState: TFocusState;
begin
  ActiveWindow := ActiveFormHandle;
  if ActiveWindow = 0 then
    TaskActiveWindow := Handle
  else
    TaskActiveWindow := ActiveWindow;
  MBMonitor := MonitorFromWindow(ActiveWindow, MONITOR_DEFAULTTONEAREST);
  AppMonitor := MonitorFromWindow(Handle, MONITOR_DEFAULTTONEAREST);
  if MBMonitor <> AppMonitor then
  begin
    MonInfo.cbSize := Sizeof(TMonitorInfo);
    GetMonitorInfo(MBMonitor, @MonInfo);
    GetWindowRect(Handle, Rect);
    SetWindowPos(Handle, 0,
      MonInfo.rcMonitor.Left + ((MonInfo.rcMonitor.Right - MonInfo.rcMonitor.Left) div 2),
      MonInfo.rcMonitor.Top + ((MonInfo.rcMonitor.Bottom - MonInfo.rcMonitor.Top) div 2),
      0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);
  end;
  WindowList := DisableTaskWindows(ActiveWindow);
  FocusState := SaveFocusState;
  if UseRightToLeftReading then Flags := Flags or MB_RTLREADING;
  try
    Result := Windows.MessageBox(TaskActiveWindow, Text, Caption, Flags);
  finally
    if MBMonitor <> AppMonitor then
      SetWindowPos(Handle, 0,
        Rect.Left + ((Rect.Right - Rect.Left) div 2),
        Rect.Top + ((Rect.Bottom - Rect.Top) div 2),
        0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);
    EnableTaskWindows(WindowList);
    SetActiveWindow(ActiveWindow);
    RestoreFocusState(FocusState);
  end;
end;


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) [Seç]


 Application.MessageBox('MESAJ' , 'BAÅžLIK', BUTTONLAR or DİALOG ICONU);


öRNEK:

Kod: (delphi) [Seç]

Application.MessageBox('Değişiklikleri Kaydetmek İstiyormusunuz?','abc v1.0', MB_OKCANCEL or MB_ICONQUESTION);


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) [Seç]

 if Memo1.Modified then  // memo düzenlendiyse ...
  begin
  // deÄŸiÅŸikliklerin kaydedilim kaydedilmeyeceÄŸini sorsun
   case Application.MessageBox('DeÄŸiÅŸiklikleri Kaydetmek İstiyormusunuz?','abc v1.0', MB_YESNO or MB_ICONQUESTION) of
    IDYES:  // cevap evetse
     begin
       if SaveDialog1.Execute then  // save dialog penceresini çalıştırsın (çalıştırdıysa)
      memo1.Lines.SaveToFile(SaveDialog1.FileName); // memo nun içindeki veriyi save dialogda seçilen yer ve isme kaydetsin
     end;
    IDNO : // hayır seçilirse ( kaydedilmesin )
  // programın kapatılıp kapatılıcağını sorsun  
CASE Application.MessageBox('Programı Kapatmak İstediğinizden Eminmisiniz?','ABC V1.0', MB_YESNO or MB_ICONQUESTION) OF
    IDYES : Application.Terminate; // cevap evetse programı sonlandırsın
    IDNO  : abort; // hayır sa iÅŸlemi durdursun...
 end;
 end;
  end;



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 Gönderen: barutali »
Kayıtlı
En İyi Öğrenme Metodu Yaparak Ve Yaşayaraktır. M.K.Atatürk.

Opt2000

  • Global Moderatör
  • *****
  • Rep: +9/-1
  • Çevrimdışı Çevrimdışı
  • Cinsiyet: Bay
  • İleti: 235
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.
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ç
Kayıtlı

barutali

  • Global Moderatör
  • *****
  • Rep: +34/-0
  • Çevrimdışı Çevrimdışı
  • Cinsiyet: Bay
  • İleti: 1.152
  • Arkandan Bir Sigara Daha Yaktım ...
    • HerÅŸeyi bilen ÅŸey
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 Gönderen: barutali »
Kayıtlı
En İyi Öğrenme Metodu Yaparak Ve Yaşayaraktır. M.K.Atatürk.