Speciální dialog - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Delphi

Speciální dialog

special_dialog

2. srpna 2001, 00.00 | Potřebujete v dialogu zobrazit další komponenty, například CheckBox nebo SpeedButton ? Není nic jednoduššího, než si přečíst tento článek, ve kterém se vše dozvíte !



Vadí vám, že standartní windows dialog volaný přes MessageDlg vás omezuje tím, že můžete použít pouze vlastní text, a k tomu si vybrat některou z ikon a sady tlačítek ? Chtěli byste vytvořit dialog, který by obsahoval další komponentu, například známý CheckBox "Show this message again" ? Tak právě pro vás je zde dnešní článek, ve kterém se vše potřebné dozvíte.

K vytvoření nového dialogu použijeme funkci CreateMessageDialog, která má následující parametry:

function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons): TForm;
  • Msg - text dialogu
  • DlgType - typ dialogu:
    • mtWarning -
    • mtError -
    • mtInformation -
    • mtConfirmation -
    • mtCustom - bez ikony
  • Buttons - tlačítka na dialogu
    • buď určíte každé zvlášť, na výběr máte z těchto:
      mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mnNoToAll, mbYesToAll, mbHelp
    • nebo si vyberete z těchto třech možností:
      mbYesNoCancel, mbOKCancel, mbAbortRetryIgnore

Jak vidíte, z celé procedury vznikce formulář, a o ten nám právě jde. Než si totiž dialog zobrazíme, pohrajeme si trochu z formulářem, změníme font, barvu nebo cokoliv jiného, přidáme další komponenty... Co kdo chce. Dáme se tedy do programování.

Začneme tím, že spustíme delphi a vytvoříme nový projekt. Na formulář vložíme pouze komponentu button, a ihned k ní vytvoříme proceduru OnClick. Nejprve si definujeme náš dialog typu TForm, potom komponentu CheckBox a nakonec jsem ještě přidal i SpeedButton, který bude sloužit pro zobrazení nápovědy. Další krok bude vytvoření dialogu a obou komponent. Dejte si pozor, aby jste při vytváření CheckBoxu a SpeedButtonu nastavili AOwner na náš dialog, jinak se vám vytvoří na formuláři, a to určitě nechcete. Dále se pokusíme změnit titulek (Caption) dialogu a také jeho výšku, aby bylo místo pro checkbox. Následuje vytvoření CheckBoxu, nastavení parametrů a to stejné i se SpeedButtonem. Pro SpeedButton si ještě vytvoříme proceduru HelpClick, do které si můžete doplnit váš libovolný kód. Po tomto kroku postupně prozkoumáme jednu komponentu po druhé, a pokud se bude jednat o Label, změníme font na tučný. Také počeštíme tlačítka z Yes na Ano a No na Ne. Konečně se dostáváme k zobrazení dialogu - po jeho zavření ještě zjistíme stav CheckBoxu a můžete všechny komponenty uvolnit. To by bylo asi tak ve stručnosti, zde je kompletní kód:


procedure TForm1.HelpClick(Sender: TObject);
begin
 ShowMessage('-    Nápověda :))   -');
end;

procedure TForm1.LbSpeedButton1Click(Sender: TObject);
var
 AMsgDialog: TForm;
 ACheckBox: TCheckBox;
 AButton:TSpeedButton;
 i:integer;
begin
 // vytvoření dialogu
 AMsgDialog := CreateMessageDialog
  ('Toto je text zprávy, kterou chcete zobrazit.'+#13#10+
  'Možná jednou, možná víckrát, to už je na uživateli...'+#13#10,
   mtInformation,[mbYes, mbNo]);

 // vytvoření checkboxu a speedbuttonu
 ACheckBox := TCheckBox.Create(AMsgDialog);
 AButton:=TSpeedButton.create(AMsgDialog);

 with AMsgDialog do
 try
  Caption := 'Nějaký title...' ;
  Height := 169;
  Font.Name:='Tahoma';

  with ACheckBox do begin  // checkbox
   Parent := AMsgDialog;
   Caption := 'Neukazovat příště tento dialog !';
   Top := 121;
   Left := 8;
   Width:=220;
  end;

  with AButton do begin   // speedbutton
   Parent := AMsgDialog;
   Caption := '';
   Hint:='Nápověda';
   ShowHint:=true;
   Top := 105;
   Left := 278;
   Flat:=true;
   Height:=32;
   Width:=32;

   Glyph.LoadFromFile('help.bmp');
   OnClick:=HelpClick;
  end;

  for i := 0 to ComponentCount-1 do
   begin
    if (Components[i] is Tlabel) then     // LABEL - tučné
       (Components[i] as TLabel).Font.Style := [fsBold];
    if (Components[i] is TButton) then
     begin
      // tlačítko Yes = Ano
      if (Components[i] as TButton).Caption = '&Yes' then
         (Components[i] as TButton).Caption := '&Ano'
      // tlačítko No = Ne
      else if (Components[i] as TButton).Caption = '&No' then
         (Components[i] as TButton).Caption := '&Ne';
     end;
   end;

  // zobrazení dialogu
  if (ShowModal = ID_YES) then begin
   if ACheckBox.Checked then
     begin
     //... CheckBox byl zaškrtnutý
     ShowMessage('Už víckrát neukazovat...');
     end
   else
     begin
     //... CheckBox nebyl zaškrtnutý
     ShowMessage('Ještě párkrát ukázat...');
     end;
  end;

 finally
  ACheckBox.Free;
  AButton.Free;
  Free;
 end;
end;


Ve vkládání komponent se vám meze nekladou, ovšem nezapomínejte, že méně je někdy více. A také zvažte, zda-li by už nebylo jednodušší vytvořit nový formulář, dát na něj pár komponent a zobrazovat pak jej. Každopádně toto je jedno z dalších možných řešení, jaké použijete je pouze na vás.

Nakonec zde ještě přikládám mnou vytvořené, trochu hezčí ikony do dialogů (16 barev je málo :():




Download
ZDE si můžete stáhnout dnes vytvořený program a jeho zdrojáky (180 kB)

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: