Sign in Join
Wiki copytemporary

Dialog Examples/fi

Deutsch · English · Español · Français · Polski · Slovenčina · Suomi · Русский · 中文(中国) · 日本語

Joitakin hyödyllisiä dialogeja

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

Jokainen näistä komponenteista aiheuttaa sen, että näyttöön tulee pieni ponnahdusikkuna, joka sisältää joitain tietoja ja vaatii käyttäjän vastauksen: joko painikkeen painaminen tai jokin tekstin kirjoittamisen tai molemmat. Ohjelmoijalla on vain vähän hallintaa näiden ponnahdusikkunoiden muodosta, koosta tai sijainnista, mutta hän voi vaikuttaa niiden tekstisisältöön. Syy, miksi usein on useita hyvin samankaltaisia vaihtoehtoja, on sallia erilaisia menetelmiä komponentin kutsumiseen ja datan vastaanottamiseen aliohjelmasta (procedure) tai funktiosta. Nämä valintaikkunat saattavat olla alustasta riippuvaisia, ts. Ne voidaan näyttää eri tavalla. Esimerkiksi merkkijonot, jotka näkyvät kokonaan Windows XP: ssä, voivat olla katkaistu Windows 7: ssä.

Viestinvälitys dialogit

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

ShowMessage

pascal
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 ennen paluuta kutsuvaan rutiiniin tai ohjelmaan. Tämä on modaalinen (modal) aliohjelmakutsu, joka näyttää "laatikon", ottaa hallinnan, eikä vapauta hallintaa ennenkuin sen OK-painonappia on painettu tai muulla tavalla valittu, ennenkuin palaa takaisin kutsukohtaansa.

Esimerkki:

pascal
program LazMessage;
uses 
  Dialogs;
begin
  ShowMessage('This is a message from Lazarus');
end.

On myös mahdollista luoda monirivinen viesti seuraavien rivierottimien avulla, ne kaikki toimivat:

monirivinen viestiesimerkki:

pascal
program LazMessage;
uses 
  Dialogs;
begin
  ShowMessage('This is a multilines' + sLineBreak + 'message!' );
end.

MessageBox

pascal
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ä)

Funktio palauttaa kokonaisluvun arvon, joka vastaa painettua painiketta. Sen arvo voidaan määrittää vakioiden [IDOK..IDHELP] perusteella Sitä voidaan kutsua kuin aliohjelmakutsuna (kuten 'MessageBox()' käskynä tai 'Variable := MessageBox()' funktiokutsuna - katso esimerkki alla)

Esimerkki:

pascal
uses 
  Forms, Dialogs, LCLType;
 
procedure DisplayMessageBox;
var 
  Reply, BoxStyle: Integer;
begin
  BoxStyle := MB_ICONQUESTION + MB_YESNO;
  Reply := Application.MessageBox('Press either button', 'MessageBoxDemo', BoxStyle);
  if Reply = IDYES then Application.MessageBox('Yes       ', 'Reply',MB_ICONINFORMATION)
    else Application.MessageBox('No         ', 'Reply', MB_ICONHAND);
end;

Huomaa, että tässä esimerkissä 'Yes' ja 'No' merkkijonot on täytetty välilyönneillä; muuten laatikko ei olisi riittävän leveä kuvatekstin näyttämiseksi oikein

MessageDLG

pascal
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ämän funktion kaksi versiota, esim. Ensimmäinen 'Caption' -parametri on valinnainen; jos se jätetään pois, otsikkotekstitys puuttuu ruudusta

Tämä on kaikkein täydellisin ja yksityiskohtaisin viestien valintaikkunoista, ja antaa ohjelmoijalle huomattavan mahdollisuuden hallita valintaikkunan ulkoasua. Laatikon tyyppiä ja sen kuvaketta määrittelevät parametrit ovat pikemminkin set tyyppisiä kuin kokonaislukuja. Painikkeet voidaan määrittää hakasulkeissa esim. [mbRetry, mbIgnore, mbAbort, mbCancel]. HelpCtx-parametria ei ole tällä hetkellä toteutettu, sen tulisi olla nolla. Funktion paluuarvo on painetun painikkeen tunnus, ilmaistuna kokonaislukuna (katso alla olevat määritelmät, [mrNone..mrAll]).

Esimerkki:

pascal
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;

QuestionDlg

Kysymysvalintaikkunassa voidaan muuttaa painikkeiden kuvatekstejä ja asettaa oletus- ja peruutuspainikkeita

Esimerkki:

pascal
    case QuestionDlg ('Caption','Message',mtCustom,[mrYes,'Positive', mrNo, 'Negative', 'IsDefault'],'') of
        mrYes: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrOK,'That is right'],'');
        mrNo:  QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrOK,'Exactly'],'');
        mrCancel: QuestionDlg ('Caption','You canceled the dialog with ESC or close button.',mtCustom,[mrOK,'Exactly'],'');
    end;

Note: Jos käyttäjä peruuttaa valintaikkunan eikä 'IsCancel' -painiketta ole määritetty, mrCancel palautetaan! Jos haluat ohjata ESC/close määritettyä painiketta, käytä 'IsCancel' -parametria heti peruutuspainikkeen jälkeen.

Note: Paikallisten aakkosten kirjainten käyttäminen UnicodeString-tyyppisinä painikkeina voi aiheuttaa virheitä (löytyi v1.6.4).

Edistyksellinen esimerkki painikkeille (promptdialog.inc)

pascal
    [mrOk,mrCancel,'Cancel now',mrIgnore,300,'Do it','IsDefault']

Tämän tuloksena saadaan 4 painonappia:

Yleensä Lazarus-valintaikkunoiden painikkeissa on kuvakkeet. Kuvakkeiden näkymisen estämiseksi voidaan käyttää viestien tulosten standardoimattomia arvoja. Tällä hetkellä korkein standardoitu arvo on 11. Esimerkiksi:

pascal
  case QuestionDlg ('Caption','Message',mtCustom,[20,'Positive', 21, 'Negative',22,'I do not know','IsCancel'],'') of
     20: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[20,'That is right'],'');
     21:  QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[21,'Exactly'],'');
     22:  QuestionDlg ('Caption','So, please find out!',mtCustom,[22,'Maybe'],'');
  end;

Työn helpottamiseksi vakiot voidaan määritellä. Esimerkiksi:

pascal
const
  mrNoneNI=      20;
  mrOkNI=        mrNoneNI+1;
  mrCancelNI=    mrNoneNI+2;
  mrAbortNI=     mrNoneNI+3;
  mrRetryNI=     mrNoneNI+4;
  mrIgnoreNI=    mrNoneNI+5;
  mrYesNI=       mrNoneNI+6;
  mrNoNI=        mrNoneNI+7;
  mrAllNI=       mrNoneNI+8;
  mrYesToAllNI=  mrNoneNI+10;
  mrCloseNI=     mrNoneNI+11;
  mrLastNI=      mrCloseNI; 
begin
  case QuestionDlg ('Caption','Message',mtCustom,[mrYesNI,'Positive', mrNoNI, 'Negative',mrCancelNI,'I do not know','IsCancel'],'') of
    mrYesNI: QuestionDlg ('Caption','So you mean „Yes“',mtCustom,[mrYesNI,'That is right'],'');
    mrNoNI:  QuestionDlg ('Caption','Oh, you mean „No“',mtCustom,[mrNoNI,'Exactly'],'');
    mrCancelNI:  QuestionDlg ('Caption','So, please find out!',mtCustom,[mrCancelNI,'Maybe'],'');
  end; //case
end;

Tekstinluku dialogit

InputBox

Tekstinluku dialogi: näyttää viestin ja odottaa käyttäjän tekstinsyöttöä

pascal
function InputBox(const ACaption, APrompt, ADefault: String): String;

Näyttää laatikon, jossa on määritetty otsikko ja kehote, ja odottaa käyttäjän syöttämää tekstiä tekstikenttään. Oletusmerkkijono voidaan valinnaisesti näyttää tekstiruudussa. Käyttäjän syöttämä tai oletusmerkkijono palautetaan funktion tuloksena.

Esimerkki:

pascal
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

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

Kaksi tämän funktion erilaista versiota, joka näyttää kehotteen ja odottaa käyttäjän syöttämää tekstitietoa; Ensimmäinen sisältää MaskInput-boolean-parametrin, joka määrittää, onko käyttäjän syöttämät tekstitulokentässä asteriskimerkki (*) peittämässä tekstiä (kuten salasanan syöttämisen aikana), kun taas toinen jättää tämän ominaisuuden pois Käyttäjän syöttämä teksti palautetaan muuttujan parametriin 'Value'; function tulos on boolean arvo, joka paluuarvo on true, jos OK-painiketta painetaan, tai false, jos ikkuna suljettiin jollain muulla mekanismilla (kuten klikkaamalla 'Sulje'/'close' -kuvaketta yläotsikkopalkissa). MaskInput-parametrin ohittaminen vastaa sen false arvon asettamista.

Esimerkki:

pascal
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('Don''t be silly', 'Please try again', UserString);
    ShowMessage(UserString);
  end
end;

PasswordBox

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

Toimii hyvin samalla tavalla kuin InputQuery-toiminto, jossa MaskInput = TRUE; ero on siinä, että kirjoitettu salasana palautetaan funktion tuloksena (kuten InputBox).

Viestinvälitys-dialogeissa käytetyt tyypit ja vakiot

Useat valintaikkunoiden kanssa käytettävät vakiot ja tyypit on ennalta määritetty LCL-kirjastossa:

const { määritelty LCLType.pp }

Kokonaislukuvakioita painityyppien määrittelemiseksi ja kuvakkeita näytettäväksi MessageBoxissa

pascal
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;

Kokonaislukuvakioita, jotka määrittelevät palautusarvon MessageBoxista sen mukaan, mitä painiketta painettiin

pascal
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ämään, onko ensimmäinen, toinen tai kolmas painike oletusasetus

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

MessageBoxin Flags-parametri rakennetaan lisäämällä painikevakio [MB_OK..MB_RETRYCANCEL], valinnainen kuvakevakio [MB_ICONHAND..MB_ICONINFORMATION] ja valinnainen oletuspainike vakio [MB_DEFBUTTON1..MB_DEFBUTTON3]

Tyypit käytettäväksi MessageDlg-sovelluksessa, joka tarvitsee parametreja AType of TMsgDlgType ja TMSgDlgButtons

pascal
{ määritelty 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 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;

From the Free Pascal wiki, page "Dialog Examples/fi", as it stood on 2019-11-10 after a change by Djzepi, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.