Dialog Examples/fi

From Lazarus wiki
Revision as of 21:49, 20 November 2007 by Djzepi (talk | contribs) (New page: {{Dialog Examples}} = Joitakin Hyödyllisiä dialogeja= Lista joistakin hyödyllistä dialogeista joita ei löydy komponenttipaletista: * procedure ShowMessage (const Msg: string); * fu...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Deutsch (de) English (en) español (es) suomi (fi) français (fr) 日本語 (ja) polski (pl) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN)

Joitakin Hyödyllisiä dialogeja

Lista joistakin hyödyllistä dialogeista joita ei löydy komponenttipaletista:

  • procedure ShowMessage (const Msg: string);
  • function MessageBox (Text, Caption : PChar; Flags: Word): Integer;
  • function MessageDlg (const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;
  • function InputBox (const ACaption, APrompt, ADefault: string); string;
  • function InputQuery (const ACaption, APrompt: string; var Value: string): Boolean;
  • function PasswordBox(const ACaption, APrompt : String) : String;

Kukin funktio tai aliohjelma tekee pienen ikkunan näytölle joka sisältää jotain tietoa ja vaatii käyttäjän vastausta: joko painonapin painamista tai tekstin kirjoittamista taikka molempia. Ohjelmoijalla on hyvin vähän säädettävää formaattia, koko tai paikkaa näissä dialogeissa, mutta voi vaikuttaa tekstimuotoiseen sisältöön.
Syy miksi on tarjolla useita hyvin samantapaisia vaihtoehtoja on sallia useita tapoka kutsua näitä ja palauttaa dataa takaisin siihen kohtaan missä näitä kutsuttiin.

Viestinvälitys dialogit

Viestinvälitys dialogitnäyttävät viestin ja odottavat että painetaan näppäintä tai napsautetaan (klikataan) hiirtä vastaukseksi.

ShowMessage

Procedure ShowMessage (const Msg: string);

{ Määritelty tiedostossa Dialogs.pp }

Yksinkertaisin viestinvälitys dialogi: ottaa yksinkertaisesti merkkijonon (string) parametriksi, näyttää sen vakiolaatikon sisällä, ja odottaa hiiren tai enter-näppäimen painallusta ennenkuin palaa takaisin kutsukohtaansa.
Tämä on (modal) aliohjelmakutsu, joka näyttää "laatikon", ottaa hallinnan, eikä vapauta hallintaa ennenkuin sen OK-painonappia on painettu tai muulla tavalla valittu.

Esimerkki:

Program LazMessage;
Uses Dialogs;
begin
  ShowMessage ('This is a message from Lazarus')
end.

MessageBox

Function Application.MessageBox (Text, Caption: PChar; Flags: longint) : Integer;

{ Määrittely on tiedostossa Forms.pp osana luokkaa TApplication; siksi sitä täytyy kutsua Application.Messagebox () tai käyttämällä 'with Application do ...' rakennetta }

Funktion kutsussa parametreihin sisältyy (katso yllä olevaa esittelyä)

  • Text: (PChar tyyppinen) merkkijono joka näytetään ohjeena tai vihjeenä laatikossa
  • Caption:(PChar tyyppinen) merkkijono joka näytetään laatikon otsikkona;
  • Flags: (longint tyyppinen)- kokonaisluku joka muodostetaan lisäämällä eri vakioita toisiinsa määrittelemään

näytettävän laatikon sisältöä ja painikkeita. Esimerkiksi MB_ABORTRETRYIGNORE + MR_ICONQUESTION tekee sen että sovellus näyttää kysymysmerkki-kuvakkeen laatikossa ja kolme painiketta: ABORT RETRY IGNORE.

Funktio palauttaa kokonaisluvun (integer) joka vastaa nappia jota oli painettu. Sen arvo määräytyy vakioiden [IDOK..IDHELP] mukaan

Sitä voidaan myös kutsua kuin aliohjemaa (kun käytetään pelkkää 'MessageBox()' -lausetta funktiokutsutavan 'Variable := MessageBox()' tilalla - katso esimerkki alla)

Esimerkki

Uses Forms, Dialogs, LCLType;

Procedure DisplayMessageBox;
  var reply, boxstyle: integer;
  begin
    with application do begin
      boxstyle :=  MB_ICONQUESTION + MB_YESNO;
      reply :=  MessageBox ('Press either button', 'MessageBoxDemo', boxstyle);
      if reply = IDYES then MessageBox ('Yes       ', 'Reply',MB_ICONINFORMATION)
      else MessageBox ('No         ', 'Reply', MB_ICONHAND)
  end;

Huomaa että tässä esimerkissä 'Yes' ja 'No' merkkijonoihin on sisälletty välilyöntejä. Muutoin laatikossa ei välttämättä olisi kylliksi tilaa näyttää koko otsikkoa.

http://lazarus-ccr.sourceforge.net/kbdata/MessageBoxDemo.png http://lazarus-ccr.sourceforge.net/kbdata/ReplyYes.png

MessageDLG

function MessageDlg(const aMsg: string; DlgType: TMsgDlgType; 
                   Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType; 
                   Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;

Tästä funktiosta on kaksi versiota. Ensimmäinen parametri 'Caption' voidaan jättää pois.

Tämä on monipuolisin viestinvälitys dialogi ja sallii ohjelmoijalla eniten säätömahdollisuuksia

Parametreillä määritellään minkälainen laatikko on . Sen kuvakkeen tyyppi valitaan kokonaislukuvakiolla ja painikkeet määritellään hakasulkujen sisällä kuten esim. [mbRetry, mbIgnore, mbAbort, mbCancel]

HelpCtx parametriä ei ole vielä toteutettu ja se pitäisi asettaa nollaksi. Funktion paluuarvo kertoo mitä näppäintä on painettu. Se kerrotaan kokonaislukuna (integer) (Katso tämän sivun lopussa olevia määrittelyä [mrNone..mrAll]).

Esimerkki

Uses forms, dialogs, lcltype, controls;

procedure TryMessageDlg;
begin
  if MessageDlg ('Question', 'Do you wish to Execute?', mtConfirmation, 
                 [mbYes, mbNo, mbIgnore],0) = mrYes
  then { Execute rest of Program };
 end;


http://lazarus-ccr.sourceforge.net/kbdata/Question.png

Tekstinluku dialogit

InputBox

Tekstinluku dialogi joka näyttää viestin ja odottaa käyttäjän antamaa tekstiä.

Function InputBox(const ACaption, APrompt, ADefault : String) : String;

Näytettävässä laatikossa on määritelty otsikko, kehoite ja käyttäjälle oletuksena annettu merkkijono. Käyttäjän kirjoittama teksti tai oletusmerkkijono palautetaan funktion tuloksena. Esimerkki

Uses forms, lcltype, dialogs, controls;

procedure TryInputBox;
var userstring: string;
begin
  userstring := InputBox ('Get some text input', 
                         'Please type in some   information', 'Some sample text');
  ShowMessage (userstring)
end;

InputQuery

Function InputQuery(const ACaption, APrompt : String;
                    MaskInput : Boolean; var Value : String) : Boolean;
Function InputQuery(const ACaption, APrompt : String;
                    var Value : String) : Boolean;

Nämä kaksi versiota näyttää kehoitustekstin ja odottaa käyttäjän kirjoittamaa tekstiä. Ensimmäinen sisältää boolean tyypinä annettavan MaskInput parametrin mikä määrittää kirjoitetaanko käyttäjän antamat merkit tähtinä (niinkuin salasanat yleensäkin) kun toisesta puuttuu tämä ominaisuus. Funktion muuttujaparametrissä Value palautetaan käyttäjän antama teksti. Funktion paluuarvona on true jos ok-painiketta on painettu tai false jos laatikko on lopettu jollain muulla tavalla (kuten napsauttamalla otsikkorivillä olevaa sulje-kuvaketta) Puuttuva MaskInput parametri toimii samalla tavalla kuin jos se olisi asetettu false:ksi.

Esimerkki

Uses forms, lcltype, dialogs, controls;

procedure TryInputQuery;
var QueryResult: boolean;
  userstring: string;
begin
  if InputQuery ('Question', 'Type in some data', TRUE, userstring)
  then ShowMessage (userstring)
  else 
  begin
    InputQuery ('Dont be silly', 'Please try again', userstring);
    ShowMessage (userstring)
  end
end;
http://lazarus-ccr.sourceforge.net/kbdata/MessageDlgQuestion.png
http://lazarus-ccr.sourceforge.net/kbdata/DontBeSillly.png

PasswordBox

Function PasswordBox(const ACaption, APrompt : String) : String;

Funktion käyttäytyminen on hyvin samanlaista kuin InputQuery funktion kun MaskInputparameri on asetettu TRUE:ksi. Erona on että funktio palauttaa saadun merkkijonon (Siis vähän samanlailla kuin funktio InputBox).

Viestinvälitys-dialogeissa käytetyt tyypit ja vakiot

Several constants and types relevant for use with the dialog boxes are pre-defined in the LCL library:


const { Määritelty tiedostossa LCLType.pp }


Kokonaislukuvakioiden määrittely painikkeista ja kuvakkeista jotka näytetään MessageBox -funktiossa

MB_OK = $00000000;
MB_OKCANCEL = $00000001;
MB_ABORTRETRYIGNORE = $00000002;
MB_YESNOCANCEL = $00000003;
MB_YESNO = $00000004;
MB_RETRYCANCEL = $00000005;


MB_ICONHAND = $00000010;
MB_ICONQUESTION = $00000020;
MB_ICONEXCLAMATION = $00000030;
MB_ICONASTERICK = $00000040;
MB_ICONWARNING = MB_ICONEXCLAMATION;
MB_ICONERROR = MB_ICONHAND;
MB_ICONINFORMATION = MB_ICONASTERICK;


Kokonaislukuvakioiden määrittely arvosta joka palautetaan MessageBox -funktiosta kun vastaavaa painiketta on painettu

IDOK = 1; 	ID_OK = IDOK;
IDCANCEL = 2;	ID_CANCEL = IDCANCEL;
IDABORT = 3;	ID_ABORT = IDABORT;
IDRETRY = 4;	ID_RETRY = IDRETRY;
IDIGNORE = 5;	ID_IGNORE = IDIGNORE;
IDYES = 6;	ID_YES = IDYES;
IDNO = 7;	ID_NO = IDNO;
IDCLOSE = 8;	ID_CLOSE = IDCLOSE;
IDHELP = 9;	ID_HELP = IDHELP;

Määrittää mikä painike on oletuspainike (ensimmäinen, toinen, kolmas)

MB_DEFBUTTON1 = $00000000;
MB_DEFBUTTON2 = $00000100;
MB_DEFBUTTON3 = $00000200;
MB_DEFBUTTON4 = $00000300;

Flags-parametri muodostetaan funktiossa MessageBox lisäämällä painiketta vastaava vakio [MB_OK..MB_RETRYCANCEL], optiona näytettävään kuvakkeen vakioon [MB_ICONHAND..MB_ICONINFORMATION] ja optiona olevaan oletuspainikkeen vakioon [MB_DEFBUTTON1..MB_DEFBUTTON3]

Types for use in MessageDlg, which needs parameters AType of TMsgDlgType and AButtons of TMSgDlgButtons


{ Määritelty tiedostossa Dialogs.pp }
type
 TMsgDlgType    = (mtWarning, mtError, mtInformation,  mtConfirmation,
                   mtCustom);
 TMsgDlgBtn     = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
                  mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
 TMsgDlgButtons = set of TMsgDlgBtn;
 

const
 mbYesNoCancel = [mbYes, mbNo, mbCancel];
 mbOKCancel = [mbOK, mbCancel];
 mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
 

 MsgDlgBtnToBitBtnKind: array[TMsgDlgBtn] of TBitBtnKind = (
  bkYes, bkNo, bkOK, bkCancel, bkAbort, bkRetry, bkIgnore,
   bkAll, bkNoToAll, bkYesToAll, bkHelp, bkClose
  );


 BitBtnKindToMsgDlgBtn: array[TBitBtnKind] of TMsgDlgBtn = (
   mbOk, mbOK, mbCancel, mbHelp, mbYes, mbNo,
   mbClose, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToALl, mbYesToAll
   );


{ Määritelty tiedostossa Controls.pp }
const
 mrNone = 0;
 mrOK = mrNone + 1;
 mrCancel = mrNone + 2;
 mrAbort = mrNone + 3;
 mrRetry = mrNone + 4;
 mrIgnore = mrNone + 5;
 mrYes = mrNone + 6;
 mrNo = mrNone + 7;
 mrAll = mrNone + 8;
 mrNoToAll = mrNone + 9;
 mrYesToAll = mrNone + 10;
 mrLast = mrYesToAll;