procedure TForm1.Button1Click(Sender: TObject);
begin
if Dialogs.MessageDlg('Welcome to my xyz application. Exit now?',
mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
begin
Dialogs.MessageDlg('Exiting the xyz application.', mtInformation,
[mbOk], 0, mbOk);
Close;
end;
end;
MessageDlg(Tit_finestra, Messaggio, mtInformation, mbYesNoCancel, 0, mbYes);
[quote author=quack link=topic=2688.msg17737#msg17737 date=1669314577]
In merito agli stili della finestra di dialogo, li trovi qui
https://lazarus-ccr.sourceforge.io/docs/lazutils/uitypes/tmsgdlgtype.html
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, LCLType, System.UITypes;
procedure TForm1.Button1Click(Sender: TObject);
// Stile finestra
//type TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom); ??????????????
Var XA, Risposta: Integer;
begin
Risposta:= MessageDlg ('Titolo finestra', 'Parametro XA', mtConfirmation,[mbYes, mbNo, mbIgnore, MbRetry, MbAbort],mtError); // Yes - No - Ignore - Retry - Abort
end;
Le diverse combinazioni di pulsanti sono possibili [...] eccetera.
MessageDlg('Tit_finestra', 'Messaggio', mtError, [mbYes, mbNo], 0, mbYes);
MessageDlg('Tit_finestra', 'Messaggio', mtWarning, [mbYes, mbNo], 0, mbYes);
Invece di mtConfirmation devi usare mtError,Codice: [Seleziona]MessageDlg('Tit_finestra', 'Messaggio', mtError, [mbYes, mbNo], 0, mbYes);
(...eccetera...)
https://wiki.freepascal.org/TTaskDialog
// N.B. da valutare solo in modo schematico: la sintassi è completamente errata!
Var Stile_Finestra: Integer; // ????
Var Stile_Risposta: Real; // ????
Var Stile_Scelta: // ????
Stile_Finestra:= mtError;
Stile_Risposta:= [mbYes,mbNO,mbCancel];
Stile_Scelta:= mbYes;
MessageDlg('Tit_finestra', 'Messaggio', Stile_Finestra, [Stile_Risposta], 0, StileScelta];
2) [/b]Che tipo di variabili sono MtWarning ... MtConfirmation (e simili) e anche mbYes ... MbNo (e simili) in modo da fare una cosa del genere:
In generale, se nell'IDE di Lazarus fai CTRL + Click su una variabile o una costante, ti manda alla sua dichiarazione.
In questo caso, le trovi anche tutte belle raggruppate, così puoi farti un'idea
MyButtons: TMsgDlgButtons;
MyButtons:=[];
MyButtons:=MyButtons + [mbNoToAll] + [mbYes];
MsgResult:=MessageDlg('Verifica presenza file Iso', Messaggio, mtError, MyButtons, 0);
//Definisco un nuovo tipo che descrive il tempo (e che posso espandere in futuro senza pregiudicare il codice già scritto)
type
TTempo = (NonPervenuto=0, Soleggiato, Nuvoloso, Piovoso, Nevoso, Temporalesco);
//Definisco una variabile di quel tipo
var Tempo: TTempo;
//Assegno uno dei possibili valori alla variabile
Tempo := Nuvoloso;
//Uso della variabile
if Tempo = Nuvoloso then
ShowMessage('Nuvoloso');
if Tempo = Soleggiato then
ShowMessage('Ohhh, il sole');
CitazioneTTempo = (NonPervenuto=0, Soleggiato, Nuvoloso, Piovoso, Nevoso, Temporalesco);
CitazioneTTempo = (NonPervenuto=0, Soleggiato, Nuvoloso, Piovoso, Nevoso, Temporalesco);
Scusa, per curiosità: hai sbagliato a scrivere, o si può veramente mettere qualcosa come "NonPervenuto=0" dichiarando un Tipo?
Se non hai sbagliato a scrivere, non sapevo che si potesse fare ... quale sarebbe il significato di quella dichiarazione?
Grazie, Mario
ord(Nuvoloso) => riporta 2 come valore;
TTempo(2) => riporta Nuvoloso come valore;
writesufile(ord(Tempo));
Tempo := TTempo(readdafile(....));
Invio:= Chr(13);
Se mi posso permettere, cancella questa riga:Codice: [Seleziona]C'è una costante, "LineEnding" che in base al sistema operativo per cui viene compilato il sorgente contiene la corretta sequenza di caratteri. Usa LineEnding al posto della tua variabile "Invio"Invio:= Chr(13);
if risposta =....
if risposta =....
...
Case risposta of
mrYes:
...
...
end
Un paio di suggerimenti,
[...eccetera...]
Mi sono invece rassegnato(!) a non poter personalizzare le stringhe sui pulsanti (Yes / Sì - Cancel / Annulla, eccetera).
if QuestionDlg('Salvataggio','Salvare le modifiche?',mtCustom,[mrYes, 'Si', mrNo, 'No'], '')=mryes then ...
Per personalizzare le stringhe dei pulsanti puoi usare il comando QuestionDlg, per esempio:Codice: [Seleziona]Con i bottoni in italiano, credo che il programma si presenti meglio.if QuestionDlg('Salvataggio','Salvare le modifiche?',mtCustom,[mrYes, 'Si', mrNo, 'No'], '')=mryes then ...
Mi è capitato, qualche volta, che l'utente finale quando vedeva dei bottoni come "Yes","Cancel" oppure "Retry", mi chiedeva come mai ci fossero dei pezzi di programma in inglese.
Per personalizzare le stringhe dei pulsanti puoi usare il comando QuestionDlg, per esempio:Codice: [Seleziona]if QuestionDlg('Salvataggio','Salvare le modifiche?',mtCustom,[mrYes, 'Si', mrNo, 'No'], '')=mryes then ...
Con i bottoni in italiano, credo che il programma si presenti meglio.
procedure TForm1.Button1Click(Sender: TObject);
Var Risposta: integer;
Var PULSANTI: TMsgDlgButtons; // ? ? ? ? ?
begin
// PULSANTI:= [mrYes, 'Esatto!', mrNo, 'Assolutamente NO!']; // Quale sintassi usare??
Risposta:= QuestionDlg('Salvataggio','Salvare le modifiche?',mtCustom,[mrYes, 'Esatto!', mrNo, 'Assolutamente NO!'],''); // FUNZIONA!
// Risposta := QuestionDlg('Salvataggio','Salvare le modifiche?',mtCustom, PULSANTI , '') // NON funziona!
end;
var P1, P3: integer;
P2, P4: string;
begin
P1 := mrYes;
P2 := 'Si';
P3 := mrNo;
P4 := 'No';
QuestionDlg('Salvataggio','Salvare le modifiche?',mtCustom, [P1, P2, P3, P4] , '');
end;
Non c'è nulla da risolvere [...] e quello che vuoi fare non è possibile.
unit A_2022_12_04_Prova_Pulsanti_personalizzati_pas;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls ;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit_Yes_Alternativo: TEdit;
Edit_No_Alternativo: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
Var Risposta, PYes_Originale, PNo_Originale: integer;
Var PULSANTI: TMsgDlgBtn;
Var PYes_Alternativo, PNo_Alternativo: string;
begin
PYes_Originale:= mrYes;
PYes_Alternativo:= Edit_Yes_Alternativo.Text;
PNo_Originale:= mrNo;
PNo_Alternativo:= Edit_No_Alternativo.Text;
Risposta:= QuestionDlg('Secondo te...','...tre per otto fa ventiquattro?',mtCustom,[PYes_Originale, PYes_Alternativo, PNo_Originale, PNo_Alternativo ],''); // FUNZIONA!
end;
end.
Se può interessare, visto che uno dei motivi di questa discussione era il fatto di avere i bottoni con le scritte in italiano, vorrei aggiungere che in lazarus ci sono questi 3 sorgenti:
lclstrconsts.pas
sysinth.inc
sysconst.pp
che al loro interno contengono le stringhe in inglese. BAsta modificarle col valore italiano, ricompilare lazarus, ed il gioco è fatto.
Io lo faccio ormai da qualche anno, e fino ad ora non mi ha ancora creato problemi questa cosa.
P.S. Naturalmente, per le prime e volte, se lo volete fare, prima fatevi un backup di questi 3 files !!!
var
DefaultFormatSettings : TFormatSettings = (
CurrencyFormat: 1;
NegCurrFormat: 5;
ThousandSeparator: ',';
DecimalSeparator: '.';
CurrencyDecimals: 2;
DateSeparator: '-';
TimeSeparator: ':';
ListSeparator: ',';
CurrencyString: '$';
ShortDateFormat: 'd/m/y';
LongDateFormat: 'dd" "mmmm" "yyyy';
TimeAMString: 'AM';
TimePMString: 'PM';
ShortTimeFormat: 'hh:nn';
LongTimeFormat: 'hh:nn:ss';
ShortMonthNames: ('Jan','Feb','Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec');
LongMonthNames: ('January','February','March','April','May','June',
'July','August','September','October','November','December');
ShortDayNames: ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
LongDayNames: ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
TwoDigitYearCenturyWindow: 50;
);
FormatSettings : TFormatSettings absolute DefaultFormatSettings;
Ah, per sysinth le uniche stringhe che vedo sono quelle delle localizzazioni per i formati dei numeri e date.
Quelle si possono "applicare" come si vogliono all'avvio dell'applicazione.Codice: [Seleziona]var
DefaultFormatSettings : TFormatSettings = (
CurrencyFormat: 1;
NegCurrFormat: 5;
ThousandSeparator: ',';
DecimalSeparator: '.';
CurrencyDecimals: 2;
DateSeparator: '-';
// Eccetera
FormatSettings : TFormatSettings absolute DefaultFormatSettings;
Non vedo la necessità di modificare le "impostazioni di fabbrica" direttamente dall'originale.