Tipy a triky v Delphi, díl 4.

Diskuze čtenářů k článku

pinus  |  15. 08. 2001 00:46  | 

Pro zvýšení efektu deaktivace tlačítka Start doporučuju ještě přemapování kombinací kláves Ctrl+Esc a Windows klávesy...

Souhlasím  |  Nesouhlasím  |  Odpovědět
Joska  |  15. 08. 2001 00:58  | 

Nevíte někdo jak napsat proceduru EnableClose na zapnutí tlačítka Close?

Našel jsem spoustu stránek s tipy a triky pro Delphi a všude bylo jak se udělá vypnutí, ale nikde jak se to znovu zapne (programově).

Joska

Souhlasím  |  Nesouhlasím  |  Odpovědět
Ales  |  15. 08. 2001 08:39  | 

Ahoj,

ja pouzivam tohle:

procedure Set_Close_Button(Form : TForm; Stav: Boolean);
var hMenuHandle : HMENU;
begin
  hMenuHandle := GetSystemMenu(Form.Handle, False);
  If (hMenuHandle<>0)
  then begin
         if Stav
         then EnableMenuItem(hMenuHandle, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED)
         else EnableMenuItem(hMenuHandle, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
         DrawMenuBar (hMenuHandle);
       end;
  Application.ProcessMessages;
end;

Ales

Souhlasím  |  Nesouhlasím  |  Odpovědět
Radek Chalupa  |  15. 08. 2001 08:25  | 

Zdravim,

pokud jde o "zakazani" close, pouzil bych jiny zpusob, a sice zadrzeni zpravy WM_SYSCOMMAND v pripade, ze wParam je SC_CLOSE. To pak zakaze i ALt-F4 a podobne. Pisu v cecku, takze priklad uvadim v C. Takhle muze  vypadat castt procedury okna:

switch ( message )
{
  case WM_SYSCOMMAND:
    if ( wParam == SC_CLOSE )
      return 0;
}

Radek Chalupa - www.rplusj.cz

Souhlasím  |  Nesouhlasím  |  Odpovědět
jimiii  |  15. 08. 2001 08:42  | 

Nejsem si jistej, ale kam bys v Delphi chtel napsat kod, ktery bude odchytavat zpravy (nastavovat promenou message)? Tohle delaji Delphi sami a zprostredkovavaji to v podobe udalosti objektu. V tomhle pripade je to myslim udalost formulare onCanClose.

jimiii

Souhlasím  |  Nesouhlasím  |  Odpovědět
jimiii  |  15. 08. 2001 08:44  | 

omlouvam se udalost je onCloseQuery

Souhlasím  |  Nesouhlasím  |  Odpovědět
Radek Chalupa  |  15. 08. 2001 09:12  | 

Dělám mimo jiné i v C++ Builderu, takže že v Delphi to bude stejné (knihovna VCL je z Delphi): TForm má virtuální funkci WndProc, což je v podstatě procedura okna, ve které můžeš odchytit JAKOUKOLI ZPRÁVU, to znamená, že tě nemusí zajímat, jestli je pro tu zprávu vytvořenej event. Například zprávy myši v neklientské oblasti okna v objectInspectoru určitě neodchytíš, ve WndProc samozřejmě ano. Příklad přepsané WndProc:

void __fastcall TMujForm::WndProc(Messages::TMessage& Message)
{
 switch ( Message.Msg )
 {
  case WM_SYSCOMMAND:
   if ( Message.WParam == SC_CLOSE )
     return; // jdeme pryč, nevoláme defaultní zpracování
  case WM_NCLBUTTONDOWN:
    // tady je kód na kliknutí v neklientské oblasti, tj, třeba v titulku
    break;
 }
 TForm::WndProc(Message); // tady volám defaultní zpracování všech ostatních zpráv
}

Radek Chalupa - www.rplusj.cz

Souhlasím  |  Nesouhlasím  |  Odpovědět
jimiii  |  16. 08. 2001 08:30  | 

dobra mas pravdu, ja jsem nad tim takhle slozite neprmyslel, kdyz tam ta udalost je...

Souhlasím  |  Nesouhlasím  |  Odpovědět
montauk  |  15. 08. 2001 23:19  | 

přesně to potřebuju....

Souhlasím  |  Nesouhlasím  |  Odpovědět
Honza Havelka  |  04. 04. 2003 19:50  | 

Chtěl bych se zeptat, jaké příkazy mohou být použity mezi Logo.Show a Logo.Hide. Je možné zde i nastavovat vlastnosti formuláře (ovšem tehdy ještě není vytvořen). Kam vlastně mohu to nastavení načítat? Děkuji za odpověď

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor
Aktuální číslo časopisu Computer

Megatest mobilů do 5 500 Kč

Test levných herních notebooků

Hrajeme na Xbox Series X

Programy pro kontrolu dětí na počítači