Med stasjonære (Windows) applikasjoner, a melding (dialogboks) brukes til å varsle brukeren av applikasjonen om at noen tiltak må gjøres, at noen operasjoner ble fullført eller generelt for å få brukernes oppmerksomhet.
I Delphi, er det flere måter å vise en melding til brukeren. Du kan enten bruke hvilken som helst av de ferdige meldingene som viser rutiner gitt på RTL, som ShowMessage eller InputBox; eller du kan opprette din egen dialogboks (for gjenbruk): CreateMessageDialog.
Et vanlig problem med alle ovennevnte dialogbokser er at de krever at applikasjonen er aktiv for å vises for brukeren. "Aktiv" refererer til når applikasjonen din har "inngangsfokus."
Hvis du virkelig ønsker å fange brukerens oppmerksomhet og hindre dem i å gjøre noe annet, må du kunne vis en systemmodal øverst meldingsboks selv om applikasjonen din ikke er aktiv.
System-Modal Topp Mest Meldingsboks
Selv om dette kan høres komplisert ut, er det faktisk ikke det.
Siden Delphi lett kan få tilgang til de fleste av Windows API-anropene, vil det å utføre "MessageBox" Windows API-funksjonen gjøre susen.
Definert i "windows.pas" -enheten - den som er inkludert som standard i bruksklausulen for hver Delphi-form, Meldingsboks funksjon oppretter, viser og betjener en meldingsboks. Meldingsboksen inneholder en applikasjonsdefinert melding og tittel, sammen med hvilken som helst kombinasjon av forhåndsdefinerte ikoner og trykknapper.
Slik blir MessageBox erklært:
funksjon Meldingsboks(
hWnd: HWND;
lpText,
lpCaption: PAnsiChar;
uType: Cardinal): heltall;
Den første parameteren, hwnd, er håndtaket til eiervinduet i meldingsboksen som skal opprettes. Hvis du oppretter en meldingsboks mens en dialogboks er til stede, bruker du et håndtak til dialogboksen som hWnd parameter.
De lpText og lpCaption spesifiser bildeteksten og meldingsteksten som vises i meldingsboksen.
Siste er den uType parameter og er den mest interessante. Denne parameteren spesifiserer innholdet og oppførselen til dialogboksen. Denne parameteren kan være en kombinasjon av forskjellige flagg.
Eksempel: Systemmodal advarselboks når systemdato / klokkeslett endres
La oss ta en titt på et eksempel på å lage en systemmodal øverst meldingsboks. du vil håndtere Windows-meldingen som sendes til alle kjørende applikasjoner når systemdato / klokkeslettendringer— For eksempel ved å bruke “Dato og klokkeslettegenskaper” -kontrollpanelet.
MessageBox-funksjonen vil bli kalt som:
Windows. Meldingsboks(
håndtak,
'Dette er en systemmodellmelding' # 13 # 10 'fra en inaktiv applikasjon',
'En melding fra et inaktivt program!',
MB_SYSTEMMODAL eller MB_SETFOREGROUND eller MB_TOPMOST eller MB_ICONHAND);
Den viktigste brikken er den siste parameteren. "MB_SYSTEMMODAL eller MB_SETFOREGROUND eller MB_TOPMOST" sikrer at meldingsboksen er systemmodal, topp mest og blir forgrunnsvinduet.
- MB_SYSTEMMODAL flagg sørger for at brukeren må svare på meldingsboksen før han fortsetter arbeidet i vinduet identifisert av hWnd-parameteren.
- MB_TOPMOST flagg angir at meldingsboksen skal plasseres over alle ikke-øverste vinduer og skal holde seg over dem, selv når vinduet er deaktivert.
- MB_SETFOREGROUND flagg sørger for at meldingsboksen blir forgrunnsvinduet.
Her er den fulle eksempelkoden (TForm kalt "Form1" definert i enheten "enhet1"):
enhet Enhet 1;
grensesnitt
bruker
Windows, meldinger, SysUtils, varianter, klasser,
Grafikk, kontroller, skjemaer, dialoger, ExtCtrls;
type
TForm1 = klasse(TForm)
privat
fremgangsmåte WMTimeChange (var Msg: TMessage); beskjed WM_TIMECHANGE;
offentlig
{Offentlige erklæringer}
slutt;
Var
Form1: TForm1;
gjennomføring{$ R * .dfm}
fremgangsmåte TForm1.WMTimeChange (var Msg: TMessage);
begynne
Windows. Meldingsboks(
håndtak,
'Dette er en systemmodellmelding' # 13 # 10 'fra en inaktiv applikasjon',
'En melding fra et inaktivt program!',
MB_SYSTEMMODAL eller MB_SETFOREGROUND eller MB_TOPMOST eller MB_ICONHAND);
slutt;
slutt.
Prøv å kjøre dette enkle programmet. Forsikre deg om at applikasjonen er minimert eller i det minste at en annen applikasjon er aktiv. Kjør "Dato og klokkeslettegenskaper" -kontrollpanelet, og endre systemtiden. Så snart du trykker på "OK" -knappen (på applet) vises systemmodal øverstmeldingsboks fra det inaktive programmet.