Mer kontroll over MessageDlg

The MessageDlg funksjonen er svært nyttig fordi det håndterer alle wordwrapping av meldingen og håndterer plassering av knappene. Men to ulike behov for et ikke-standard behavoir av MessageDlg gjorde meg utforske kildekoden til Dialoger enhet. Denne artikkelen opprinnelig dukket opp på www.undu.comFirst jeg trengte en modal dialogboks som ville lukke når en tast ble trykket og rapportere tilbake hva tasten ble trykket. Mye som Turbopascal kommandoer IF KEYPRESSED THEN TheKey: = READKEY.Second jeg trengte for å kontrollere hvilke av knappene i dialogboksen var standard. Hvis du har en MessageDlg spør "Vil du virkelig ønsker å slette filen?" deretter å ha Ja-knappen som standard (som er standard i MessageDlg) kan skape problemer for mye til ivrige user.The Dialoger enheten har en funksjon som heter CreateMessageDialog som brukes av MessageDlg å gjøre dialogen. Ved å bruke CreateMessageDialog direkte du får det beste av MessageDlg (wordwrapping og andre automatiske designelements) pluss at du får mer kontroll over oppførselen til dialog.Below er vist min løsning på de to needs.Create en ny søknad. Sette to knapper og en etikett på skjemaet. Tildele onClick tilfelle Button1 å TForm1.Button1Click og tildele onClick tilfelle knappen2 å TForm2.Button2Click.Clicking Button1 vil nå produsere en dialogboks som lukkes når brukeren trykker en av de "lovlige nøkler" eller når brukeren trykker ESC eller klikk close-ikonet. Nøkkelen som ble trykket vil bli vist i Label1.Clicking Button2 vil vise en standard dialog melding med én forskjell: No-knappen er standard, ikke Ja-knappen. For å finne den No-knappen jeg bruker IF TButton (kontroller [n]). Name = "Nei". Substitute 'No' med 'YesToAll', 'Avbryt' eller noen av de andre knappe-bildetekster for å lage en knapp default.unit Unit1; interfaceuses Windows, Meldinger, SysUtils, Klasser, Grafikk, kontroller, skjemaer, Dialoger, StdCtrls; skriver TForm1 = klasse (TForm) Button1: TButton; Label1: TLabel; Button2: TButton; Prosedyren Button1Click (Sender: TObject); Prosedyren HelpBoxKeyPress (Sender: TObject; Var Key: Char); Prosedyren Button2Click (Sender: TObject); private {felleserklæringer} offentlige {offentlige erklæringer} end; Var Form1: TForm1; implementerings {$ R * .DFM} VAR LegalKeys: String; prosedyre TForm1.Button1Click (Sender: TObject); VAR s: String; begynne LegalKeys: = ' ABC123 '; s: = '? Hva vil du gjøre nå' + # 13 # 13 + 'A. Gå hjem "+ # 13 + 'B. Spis lunsj '= # 13 +' C. Sove '+ # 13 +' en. Program i Delphi '+ # 13 +' 2. Bestille en Pizza '+ # 13 +' tre. Ikke noe'; MED CreateMessageDialog (s, mtConfirmation, []) DO BEGIN prøve onkeypress: = HelpBoxKeyPress; HVIS ShowModal = mrOK SÅ Label1.Caption: = 'Du trykket:' + LegalKeys [Tag] ELSE Label1.Caption: = 'Du trykket: "+" Avbryt "; endelig Free; slutt; //try..finally END; //withend; prosedyre TForm1.HelpBoxKeyPress (Sender: TObject; Var Key: Char); BEGIN IF Pos (upcase (Key), LegalKeys) > 0 da begynne TForm (Sender) .Tag: = Pos (upcase (Key), LegalKeys); TForm (Sender) .ModalResult: = mrOK; END ELSE IF Key = # 27 SÅ TForm (Sender) .ModalResult: = mrCancel; END; prosedyre TForm1.Button2Click (Sender: TObject); VAR n: Integer; begynne med CreateMessageDialog ('Ønsker du virkelig å slette filen? , mtWarning, [mbYes, mbNo]) DO BEGIN FOR n: = 0 til ControlCount-en DO IF (Controls [n] er TButton) SÅ HVIS TButton (Controls [n]) name = 'Nei' SÅ TButton (kontroller [. ,,,0],n]) TabOrder: = 0;. ShowModal; END; end;. Slutten Anmeldelser



Previous:
Next Page: