|
 | | |
| Autor | Správa |
Siriuse
 Užívateľ
 Založený: 23.05.2009 Príspevky: 81 Bydlisko: Michalovce
 | Zaslal: Po 20.07.09 17:13 |   |
Ked chcem pri ukonceni mojho programu, myslim tym stlacnie kriziku v pravom hornom rohu, aby mi vyskocilo messagebox s ponukou ulozit ano - ulozi a ukonci, nie - ukonci a CANCEL - neukonci program a nic sa nestane... ku akej akcii to treba pridat aby sa program neukoncil po stlaceni krizika? |
| |
   |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Po 20.07.09 19:35 |   |
Do eventu OnClose hlavného formu pridaj tento kód:
| kód: | procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
case MessageBox(Handle, 'V editore boli vykonané zmeny. Prajete si zmeny uložiť?', PChar(Application.Title),
MB_YESNOCANCEL or MB_ICONQUESTION) of
ID_YES: RutinaNaUlozenieZmien();
ID_NO: ;
ID_CANCEL: Application.Run;
end;
end; |
RutinaNaUlozenieZmien() je procedúra, v ktorej sa napríklad uložia potrebné dáta na disk. |
| |
   |
 |
feromakovi
 Užívateľ
 Založený: 12.05.2009 Príspevky: 33 Bydlisko: Bánovce nad Bebravou
 | Zaslal: Ut 21.07.09 23:55 |   |
to fico:
ahoj pls mohol by si mi prosím ťa vysvetliť, že z kade si prišiel na to že v tej procedúre albo funkcií messagebox je aj parameter to PChar(Aplication.title)??
keď sa pozriem v delphi do helpu tak tam nič také nieje.
ja som zatiaľ na všetko používal takúto funkciu:
| kód: | function MessageDlgTitle(const Title: String; const Msg: string; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
begin
with CreateMessageDialog(Msg, mtCustom, Buttons) do
try
Caption:=Title;
HelpContext:=HelpCtx;
HelpFile:='';
Position:=poScreenCenter;
result:=ShowModal;
finally
Free;
end;
end; |
a tá dokonca v mojom helpe ani nieje tak rád by som sa spýtal že ako na to prídem že čo v sebe také niečo v sebe ukrýva a dá sa zmeniť aj to čo na prvý pohľad zmeniť nejde?? ale vieš ide o princíp nejde mi o to že ako zmeniť ten caption...ale že ako na to niekto prišiel že sa dá zmeniť??
uf dúfam že som sa správne vyjadril a porozumieš mojej otázke...ja by som chcel vedieť niečo ako datasheet tej procedúry alebo funkcie  |
_________________ SE C905 8GB
Gaming Notebook MSI GX720X-027SK P8400 4GB 320GB VGA | |
     |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: St 22.07.09 19:44 |   |
Nie som si istý, či som to pochopil správne, ale vysvetlím radšej všetko
Funkcia MessageBox:
Je to API funkcia (preto nie je v nápovede Delphi - tam sú len Delphi funkcie), ktorá má štyri parametre:
| kód: | hWnd: HWND, // handle okna, ktoré bude vlastníkom okna správy
lpText: PAnsiChar, // text zobrazený v tele správy
lpCaption: PAnsiChar, // text zobrazený v nadpise správy
uType: Cardinal // bitové vlajky (flags) nastavujúce vlastnosti okna správy
|
Ak si si všimol hlavný rozdiel medzi funkciami MessageBox a CreateMessageDialog, druhá spomenutá berie ako parameter reťazec string. MessageBox PAnsiChar (dôvod je jednoduchý - MessageBox je API funkcia, teda je "optimalizovaná" pre všetky jazyky, kdežto CreateMessageDialog je funkcia platná len pre Delphi.
Dátový typ PAnsiChar:
Je to reťazec, ktorý je ukončený nulou. Delphi pracuje s reťazcom string (neviem presne, aká je jeho štruktúra, ale zdá sa mi, že na offsete, kde začína, je jeho dĺžka, ale to si nie som istý), no ten by sa nedal použiť napríklad v jazyku C. Preto v API funkciách je použitý akýsi "štandard", ktorý je použiteľný vo viacerých jazykoch. Z Delphi reťazca string sa ale dá veľmi jednoducho pretypovať na PAnsiChar takto:
| kód: | | pcharRetazec:= PChar(stringRetazec); |
Application.Title:
V tejto globálnej premennej je názov aplikácie (titulok), ktorý je vidieť napríklad na hlavnom paneli.
Zistenie, ktorá funkcia má aké parametre:
Ak sa jedná o API funkciu, o tých máš potrobný popis v súbore WIN32.HLP - nachádza sa v zložke Delphi, štandardne C:\Program Files\Common Files\Borland Shared\MSHelp\WIN32.HLP. A samozrejme, dobrý pomocník je google.
Už je to lepšie, alebo treba ešte niečo vysvetliť? |
| |
   |
 |
feromakovi
 Užívateľ
 Založený: 12.05.2009 Príspevky: 33 Bydlisko: Bánovce nad Bebravou
 | Zaslal: St 22.07.09 21:50 |   |
nie nie presne tak som to potreboval vysvetliť ..vôbec som nevedel kde by som sa o tom viac dozvedel a vôbec som nevedel že existuje nejaký win32.hlp
ďakujem ti veľmi pekne
 |
_________________ SE C905 8GB
Gaming Notebook MSI GX720X-027SK P8400 4GB 320GB VGA | |
     |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
| |