Dialog penceresine checkBox yerleştirmek

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Dialog penceresine checkBox yerleştirmek

Mesaj gönderen Fatih! »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject) ;
var
  AMsgDialog: TForm;
  ACheckBox: TCheckBox;
begin
//Dialog Penceresini oluştur
  AMsgDialog := CreateMessageDialog('This is a test message.', mtWarning, [mbYes, mbNo]) ;
//CheckBox yaada başka bir pencere oluştur
  ACheckBox := TCheckBox.Create(AMsgDialog) ;
  with AMsgDialog do
  try
   Caption := 'Diyalog başlığı' ;
   Height := 169;

   with ACheckBox do
   begin
    Parent := AMsgDialog;
    Caption := 'Bir daha sorma';
    Top := 121;
    Left := 8;
   end;

   if (ShowModal = ID_YES) then
   begin
    if ACheckBox.Checked then
      //CheckBox işaretliyse yapılacaklar
    else
      //CheckBox işaretli değilse yapılacaklar

   end;
  finally
   Free;
  end;
end;
Not: TControl türevi herhangi bir nesne eklenebilir
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Teşekkürler Fatih kardeş.. Şu an şöyle bir uygulama olabilir diye düşündüm. Mesela programı kapatırken "Programdan Çıkmak İstiyor musunuz?" sorusunun üstünde "Veri tabanını yedekle" şeklinde bir checkbox konup gerekiyorsa yedekletilebilir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Teşekkürler güzel bir örnek. Bunu fonksiyon haline getirelim genel kullanım için kolaylık sağlasın...

Kod: Tümünü seç

Function MyMessageChkBoxDlg( DlgTitle, DlgMsg:String; DlgType: TMsgDlgType; Buttons:TMsgDlgButtons; ChkMsg:String ):Word;
var
  AMsgDialog : TForm;
  ACheckBox  : TCheckBox;
begin
  Result := 0;
  AMsgDialog := CreateMessageDialog( DlgMsg, DlgType, Buttons) ;
  ACheckBox := TCheckBox.Create(AMsgDialog) ;
  with AMsgDialog do
  try
    Caption := DlgTitle;
    Height  := Height + 20;

    with ACheckBox do
    begin
      Parent  := AMsgDialog;
      Caption := ChkMsg;
      Top     := AMsgDialog.Height - ACheckBox.Height - 40;
      Left    := 8;
      Width   := Canvas.TextWidth( Caption ) + 20;
    end;
    ShowModal;
    if ACheckBox.Checked then Result := 100
  finally
    Inc(Result, AMsgDialog.ModalResult);
    Free;
  end;
end;
- CheckBox için, üretilen mesaj penceresinin mevcut yüksekliğine +20 height eklemek kafi. ( CheckBox Font büyüklüğüne göre Canvas.TextHeight ile daha da dinamik hale getirilebilir siz bilirsiniz )

- Nihayetinde; CheckBox işaretli ise sonuca temsili olarak 100 sayısını ekledik. Dönen sonucun 100'den büyük olup olmadığını kontrol ederek hem işaretli olup olmadığını, hem de varsa bu rakamı düşerek gerçek sonucu elde etmiş olduk.

Kullanımı ise şöyle olacak...

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
  Cevap : Word;
  Sonuc : String;
begin
  Sonuc := 'CheckBox ONAYLANMAMIŞ';
  Cevap := MyMessageChkBoxDlg( 'Başlık', 'Test Mesajı'#13'1'#13'2'#13'3'#13'4'#13'5', mtConfirmation, [mbYes, mbNo, mbCancel], 'Bir Daha Gösterme');
  If Cevap > 100 then begin
    Dec(Cevap, 100);
    Sonuc := 'CheckBox Onaylanmış';
  end;
       If Cevap = mrYes    then Sonuc := 'Yes    - '+ Sonuc
  else If Cevap = mrNo     then Sonuc := 'No     - '+ Sonuc
  else if Cevap = mrCancel then Sonuc := 'Cancel - '+ Sonuc;
  ShowMessage( Sonuc);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Muharem hoca da çok güzel ve uygulanabilir bir örnek verdi.. Burada CheckBox ın konumunu şu şekilde ortalatabiliriz :wink:

Kod: Tümünü seç

...
      Left := trunc((AMsgDialog.Width - Canvas.TextWidth( ChkMsg ) ) / 2); // 8;
...
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

Ben de teşekkür ettim.

Bir blogda rastladım. @rsimsek ağabeyin düşüncesi ile ekleyeyim dedim. Lazım olursa kopyala yapıştır yapmak maksadıyla :)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@rsimsek evet mantıklı bir eklenti olmuş. Daha basite indirgemek için, zaten checkbox'un boyutu, Width ataması ile olgunlaştığınıa göre

Kod: Tümünü seç

      Width   := Canvas.TextWidth( Caption ) + 20; 
      Left    := (AMsgDialog.Width-Width) div 2; 
şeklinde bir yer değişikliği ile yapmak mümkün...
Resim
Resim ....Resim
Cevapla