* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Novembre 25, 2024, 09:35:18 pm

Inserisci il nome utente, la password e la durata della sessione.

58 Visitatori, 0 Utenti

Autore Topic: [RISOLTO] Principianti(!) Parametri Finestre di dialogo.  (Letto 4495 volte)

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
[RISOLTO] Principianti(!) Parametri Finestre di dialogo.
« il: Novembre 24, 2022, 11:28:39 am »
N.B. RISOLTO: vedi post N. 18

-------------------------------------

Sto "esplorando" le finestre di dialogo. Ho esaminato tre link...

https://lazarus-ccr.sourceforge.io/docs/lcl/dialogs/messagedlg.html
https://lazarus-ccr.sourceforge.io/docs/lcl/forms/tapplication.messagebox.html
https://www.lazaruspascal.it/index.php?topic=2276.msg14125#msg14125

...ma non ho trovato i valori da assegnare a STILE_FINESTRA (che dovrebbe essere un intero?).

Tra l'altro, le info sulla cartella Dialogs del programma (vedi allegato) non sembrano valide. Sostituendo per esempio mtConfirmation,[mbYes, MbNo] con una delle seguenti...
 
// Combinations of buttons.
  mbYesNoCancel = [mbYes, mbNo, mbCancel];
  mbYesNo = [mbYes, mbNo];
  mbOKCancel = [mbOK, mbCancel];
  mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];


...compare sempre Error: ordinal expression expected. E così anche con le altre tre "abbreviazioni".

Tra l'altro, (vedi "Tripli" nel programma) con [mbYes, mbIgnore, MbCancel], compare la finestra con due soli pulsanti, ma forse mi sono incasinato con tutti quei parametri...
...
Inoltre non ci sono indicazioni su come impostare, per un determinato pulsante, il valore di default per consentire all'utente di premere il tasto invio senza essere costretto a selezionare il pulsante con il mouse.
Ho provato con 64(!) valori diversi (vedi Button1) che vengono accettati, ma non sortiscono alcun effetto. Devo proseguire fino a 256?

A parte tutto, che differenza (sostaziale) c'è tra MessageDlg e MassageBox?

Mi sono invece rassegnato(!) a non poter personalizzare le stringhe sui pulsanti (Yes / Sì - Cancel / Annulla, eccetera).

Allego screenshot e ZIP, che credo possa essere di aiuto ai principianti e a chi intenda dare una mano.
« Ultima modifica: Novembre 28, 2022, 05:25:05 pm da AlexLazarus »

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:Principianti(!) Parametri Finestre di dialogo.
« Risposta #1 il: Novembre 24, 2022, 02:00:40 pm »
Il valore di uscita di una finestra di dialogo non è mbYes ma mrYes
... modalbuttonYes è quello che vuoi nella dialog,
... modarlresultYes, è quello che ottieni

chiaramente questo vale anche per le altre combinazioni, va da se che è possibile "chiedere" alla Dialog di inserire diversi pulsanti,
ma in uscita si otterrà un solo valore, che è il Modal Result della Dialog Box, sul quale poi si possono effettuare tutti i controlli che si vuole.

ecco un esempio,

Codice: [Seleziona]
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;
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

quack

  • Jr. Member
  • **
  • Post: 84
  • Karma: +7/-0
Re:Principianti(!) Parametri Finestre di dialogo.
« Risposta #2 il: Novembre 24, 2022, 07:29:37 pm »
@AlexLazarus:

In merito agli stili della finestra di dialogo, li trovi qui

https://lazarus-ccr.sourceforge.io/docs/lazutils/uitypes/tmsgdlgtype.html

In merito all'errore di compilazione utilizando una Combination of buttons, quando la passi alla funzione devi togliere le parentesi quadre perchè la Combinations è già un set di costanti.

Per esempio:

Codice: [Seleziona]
MessageDlg(Tit_finestra,  Messaggio, mtInformation, mbYesNoCancel, 0, mbYes);

L'ultimo parametro passato alla funzione, in questo caso mbYes, è il punsante di default,
se l'utente preme invio la funzione restituisce mrYes.

Non credo che tutte le combinazioni di pulsanti siano ammesse, es. [mbYes, mbIgnore, mbCancel].
« Ultima modifica: Novembre 24, 2022, 09:15:11 pm da quack »
SO: Fedora\W10
Lazarus: Trunk
FPC: Trunk\3.2.2

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:Principianti(!) Parametri Finestre di dialogo.
« Risposta #3 il: Novembre 24, 2022, 09:02:53 pm »
Le diverse combinazioni di pulsanti sono possibili, chiaramente devono essere utilizzate con la logica

questi i valori che determinano il tipo di pulsante che una Dialog può mostrare,

The Buttons value may be one or more of the following enumerated values :
mbYes            Displays a 'Yes' button
mbNo               Displays a 'No' button
mbOK               Displays an 'OK' button
mbCancel     Displays a 'Cancel' button
mbAbort            Displays an 'Abort' button
mbRetry            Displays a 'Retry' button
mbIgnore            Displays an 'Ignore' button
mbAll            Displays an 'All' button
mbNoToAll    Displays a 'No to all' button
mbYesToAll     Displys a 'Yes to all' button
mbHelp            Displays a 'Help' button

inoltre esistono delle combinazioni di pulsanti, già predefinite, per facilitare la gestione
mbYesNoCancel    = [mbYes,mbNO,mbCancel]
mbYesAllNoAllCancel    =[mbYes,mbYesToAll, mbNo,mbNoToAll,mbCancel]
mbOKCancel            =[mbOK,mbCancel]
mbAbortRetryCancel    =[mbAbort,mbRetry,mbCancel]
mbAbortIgnore            =[mbAbort,mbIgnore]

e questi i valori numerici restituiti dalla Dialog alla sua chiusura, relativi al pulsante premuo:

mrYes    = 6
mrNo    = 7
mrOK    = 1
mrCancel    = 2
mrAbort    = 3
mrRetry    = 4
mrIgnore    = 5
mrAll    = 8
mrNoToAll = 9
mrYesToAll   = 10

M
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:Principianti(!) Parametri Finestre di dialogo.
« Risposta #4 il: Novembre 25, 2022, 10:27:10 am »
Codice: [Seleziona]
[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

Scusa, ma per gli stili sono ancora in confusione.
Ho letto... https://lazarus-ccr.sourceforge.io/docs/lazutils/uitypes/tmsgdlgtype.html

...ma a parte che Lazarus suggerisce System.UIType al posto dell'obsoleto UITypes (poco male, ho provveduto a sostituire in Classes), ma proprio non ho capito come piffero devo inserire il parametro desiderato relativo allo stile della finestra.
Per esempio, volendo far comparire il simbolo dell'errore, che devo fare?

Codice: [Seleziona]
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;       

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:Principianti(!) Parametri Finestre di dialogo.
« Risposta #5 il: Novembre 25, 2022, 10:31:47 am »
Le diverse combinazioni di pulsanti sono possibili [...] eccetera.

Ma infatti, sono proprio molte delle variabili che ho inserito nel programma dimostrativo (ZIP file) allegato al post iniziale.

quack

  • Jr. Member
  • **
  • Post: 84
  • Karma: +7/-0
Re:Principianti(!) Parametri Finestre di dialogo.
« Risposta #6 il: Novembre 25, 2022, 11:15:06 am »
Invece di mtConfirmation devi usare mtError,

Codice: [Seleziona]
MessageDlg('Tit_finestra',  'Messaggio', mtError, [mbYes, mbNo],  0, mbYes);

Se ti serve una finestra di Warning usa mtWarning

Codice: [Seleziona]
MessageDlg('Tit_finestra',  'Messaggio', mtWarning, [mbYes, mbNo],  0, mbYes);

e cosi via per le altre tipologie di finestre. I valori ammessi sono:

mtWarning
mtError
mtInformation
mtConfirmation
mtCustom
« Ultima modifica: Novembre 25, 2022, 01:09:07 pm da quack »
SO: Fedora\W10
Lazarus: Trunk
FPC: Trunk\3.2.2

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:Principianti(!) Parametri Finestre di dialogo.
« Risposta #7 il: Novembre 27, 2022, 09:22:43 am »
Invece di mtConfirmation devi usare mtError,

Codice: [Seleziona]
MessageDlg('Tit_finestra',  'Messaggio', mtError, [mbYes, mbNo],  0, mbYes);

(...eccetera...)

Oh! Finalmente.  :) Grazie!
Tra breve pubblicherò il programma (ZIP) completo e aggiornato con i suggerimenti ricevuti.
Rimane la seconda parte delle mie perplessità segnalata nel post originario:

A parte tutto, che differenza (sostaziale) c'è tra MessageDlg e MassageBox?

Per il momento modifico il post originale con Quasi RISOLTO; poi vedremo...  ;)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1404
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:[quasi RISOLTO] Principianti(!) Parametri Finestre di dialogo.
« Risposta #8 il: Novembre 27, 2022, 09:56:03 am »
La differenza sostanziale è che la MessageBox è una Api di Windows, mentre MessageDlg è una variante potenziatata e migliorata della LCL.

Nella MessageDlg puoi impostare le coordinate di visualizzazione, il contesto di Help a cui accedere, oltre ad altre migliorie rispetto alla MessageBox standard di Windows.

Tieni presente che non si dovrebbe usare MessageBox, MessageDlg e ShowMessage nei Thread, come in genere alcuna finestra di dialogo.

In Lazarus c'è una variante alle dialog box, la TaskDialog che incapsula sempre una Api di Windows e che può essere usata nei Thread (con cautela):

Citazione
https://wiki.freepascal.org/TTaskDialog

Ciao
« Ultima modifica: Novembre 27, 2022, 10:09:36 am da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:[quasi RISOLTO] Principianti(!) Parametri Finestre di dialogo.
« Risposta #9 il: Novembre 27, 2022, 05:00:38 pm »
Ho applicato le informazioni ricevute (grazie ancora!) al programma-demo pubblicato nel primo post, che allego qui 2022_11_27_Finestre_dialogo.ZIPoltre a tre screenshot.

Rimangono da stabilire alcune cosette(!)

1) In che modo si può gestire Custom?

2)
Che tipo di variabili sono MtWarning ... MtConfirmation (e simili) e anche mbYes ... MbNo (e simili) in modo da fare una cosa del genere:

Codice: [Seleziona]
// 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];

Comunque, per il momento le informazioni sono più che sufficienti per capire come gestire le finestre di dialogo nella stragrande maggioranza dei casi.
« Ultima modifica: Novembre 27, 2022, 05:17:26 pm da AlexLazarus »

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:[quasi RISOLTO] Principianti(!) Parametri Finestre di dialogo.
« Risposta #10 il: Novembre 27, 2022, 07:31:32 pm »
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


Ciao, Mario

AlexLazarus

  • Jr. Member
  • **
  • Post: 91
  • Karma: +1/-0
Re:[quasi RISOLTO] Principianti(!) Parametri Finestre di dialogo.
« Risposta #11 il: Novembre 28, 2022, 10:18:16 am »
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

...uhmm... forse non sono stato chiaro. Le costanti le ho trovate, ma a parte il fatto che sono "singole", non vedo come sia possibile utilizzarle in un programma. Esempio (ovviamente errato) negli screenshot.

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:[RISOLTO] Principianti(!) Parametri Finestre di dialogo.
« Risposta #12 il: Novembre 28, 2022, 10:38:56 am »
Non so se ho capito bene, ma ...

Dichiari la variabile:
Codice: [Seleziona]
    MyButtons: TMsgDlgButtons;

La inizializzi:
Codice: [Seleziona]
    MyButtons:=[];

Se ad esempio è vera una certa condizione, aggiungi i bottoni:
Codice: [Seleziona]
    MyButtons:=MyButtons + [mbNoToAll] + [mbYes];

A questo punto puoi emettere la richiesta:
Codice: [Seleziona]
    MsgResult:=MessageDlg('Verifica presenza file Iso', Messaggio, mtError, MyButtons, 0);

Ciao, Mario

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:[RISOLTO] Principianti(!) Parametri Finestre di dialogo.
« Risposta #13 il: Novembre 28, 2022, 11:00:37 am »
AlexLazarus,

secondo me fai confusione tra:

le costanti mb... che sono le costanti per i pulsanti, da usare come parametro all'interno della chiamata, ... [mbAll] ad esempio

e

le costanti mr ... che sono le costanti restitute dalla Dialog quando esci.

nel tuo esempio "Forum_Lazarus_Finestra_Dialogo_B.png" inserisci nella chiamata della Dialog mrAll ... invece di mbAll

SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1404
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:[RISOLTO] Principianti(!) Parametri Finestre di dialogo.
« Risposta #14 il: Novembre 28, 2022, 03:46:36 pm »
@AlexLazarus,

a differenza di VB, il Pascal è un linguaggio che si basa molto sulla definizione di "TIPO".

Oltre ai "TIPI" noti come integer, double, string, INT64, etc ... esistono una miriade di "TIPI" definiti per descrivere al meglio (e possibilmente senza mischiare e fare confusione) l'uso in un certo contesto.

La maggior parte dei "TIPI" esistenti deriva dalle API di Windows, ad esempio le definizioni di cui in questo topic si è discusso, altri sono e possono essere creati a proprio uso e consumo .... anzi direi che DEVONO essere creati ...

Esempio:

Citazione
//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');


Ovviamente anche la definizione di "TIPI" è varia: possono essere interfacce, classi, record, enumerazioni, etc ....

Prova a dare una occhiata all'indice del forum e dai una letta agli articoli riguardanti Lazarus.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19197
  • Topic in totale: 2289
  • Online Today: 68
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 58
Total: 58

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.