* * * *

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.
Maggio 02, 2024, 02:19:37 pm

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

516 Visitatori, 0 Utenti

Autore Topic: [Risolto] Dimensioni Form alterate  (Letto 921 volte)

petrusic

  • Hero Member
  • *****
  • Post: 591
  • Karma: +0/-0
[Risolto] Dimensioni Form alterate
« il: Febbraio 07, 2021, 04:42:47 pm »
Non so spiegarmi come mai trovo le dimensioni del Form2 impostate a valori diversi da quelle segnate nelle rispettive proprietà Height e Width.
Le mie impostazioni, in fase di disegno, sono Height: 700; Width:1350.
Mi capita spesso che, dopo una modifica del programma, avviando la compilazione e l'esecuzione, si apre una form con dimensioni ridotte rispetto a quelle impostate. Verificando poi il contenuto della finestra delle proprietà, trovo i seguenti valori: Height: 518; Width:1024.

Bene, allora ho pensato di impostare le mie dimensioni ad ogni avvio del programma con:
Codice: [Seleziona]
Form2.Width:= 1350;
Form2.Height:= 700;
Il programma si avvia senza errori nella compilazione, ma al momento dell'apertura finestra della Form, compare il seguente errore
Citazione
Il progetto ContDomInDomusRatioha sollevato una
eccezione di classe 'Exterbal: SIGSEGV'
nel file 'include/control.inc' alla riga 4259

Se, invece scrivo lo stesso tipo di istruzione per un qualsiasi controllo, interno alla Form2, il programma non dà alcun tipo di errore e la Form2 si apre benissimo con l'assoluta accettazione delle modifiche eseguite attravero l'istruzione Controllo.width:= 123

Ma perchè?
« Ultima modifica: Febbraio 11, 2021, 11:57:19 am da petrusic »
ciao ciao

bonmario

  • Hero Member
  • *****
  • Post: 1302
  • Karma: +10/-1
Re:Dimensioni Form alterate
« Risposta #1 il: Febbraio 07, 2021, 07:38:44 pm »
Sarebbe interessante capire su quale istruzione ti si blocca quando ti da quell'errore ... la mia sfera di cristallo non funziona così bene !!!

Scherzi a parte, mi ricordo di un vecchio bug, che memorizzava altezza e larghezza del form sbagliate, ma era di parecchi anni fa' ... che versione hai di Lazarus?


Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Dimensioni Form alterate
« Risposta #2 il: Febbraio 08, 2021, 12:25:59 pm »
Ma la form è istaziata o hai forzato le dimensioni prima che venga creata?

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

petrusic

  • Hero Member
  • *****
  • Post: 591
  • Karma: +0/-0
Re:Dimensioni Form alterate
« Risposta #3 il: Febbraio 09, 2021, 10:09:51 pm »
mi ricordo di un vecchio bug, che memorizzava altezza e larghezza del form sbagliate, ma era di parecchi anni fa' ... che versione hai di Lazarus?
[/quote]
Lazarus. v2.0.10
ciao ciao

petrusic

  • Hero Member
  • *****
  • Post: 591
  • Karma: +0/-0
Re:Dimensioni Form alterate
« Risposta #4 il: Febbraio 09, 2021, 10:36:43 pm »
Ma la form è istaziata o hai forzato le dimensioni prima che venga creata?
Tutte le istruzioni che agiscono sulle proprietà dei controlli contenuti nella Form, quindi anche quelle proprie della Form, sono scritte dentro la procedura "TForm2.FormCreate"
Ne riporto un piccolo estratto:
Codice: [Seleziona]
procedure TForm2.FormCreate(Sender: TObject);
var
  i, n: Integer;
  schermOrizz, schermVert: Integer;
  prima: String = '';
  sLun, striMia: String;
  Col1Stile: TTextStyle;
begin
//----------------------------------------------------------------------------------------------------------------------------
  Form2.Width:= 1350;     //  da ERRORE per eccezione di classe 'Exterbal: SIGSEGV'
  Form2.Height:= 700;     //  da ERRORE per eccezione di classe 'Exterbal: SIGSEGV'
//----------------------------------------------------------------------------------------------------------------------------
  PulsAnnulla.width:= 150;     // Questa FUNZIONA perfettamente

  PulsAggiDB.Caption:='AGGIUNGI' + chr(10) + '    AL DB';
  GRmovv.ColWidths[0]:= 25;
  n:= GRmovv.RowCount - 1;
  for i:= 1 to n do
  begin
    sLun:= IntToStr(i);
    case Length(sLun) of
      1:
        begin
          sLun:= '0' + sLun;
        end;
    end;
    GRmovv.Cells[0,i]:= sLun;  // [0, i] -> [orizzontale, verticale]
    GRmovv.Cells[1,i]:= 'Descrizione relativa alla riga' + IntToStr(i) + ', nella griglia'; 
   . . .

Purtroppo non sono in grado di capire se quando viene eseguita la prima istruzione della proc. Form.Create, la Form sia stata già istanziata. o, se, invece, venga istanziata dopo l'ultima istruzione della procedura.
Capisci perciò che non so rispondere alla tua domanda.  :-[
ciao ciao

bonmario

  • Hero Member
  • *****
  • Post: 1302
  • Karma: +10/-1
Re:Dimensioni Form alterate
« Risposta #5 il: Febbraio 10, 2021, 08:05:24 am »
Se vai in Progetto ==> Opzioni progetto ==> Form Hai 2 colonne: "form creati automaticamente" e "form disponibili"

Form2 in che colonna si trova?

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Dimensioni Form alterate
« Risposta #6 il: Febbraio 10, 2021, 12:30:28 pm »
Ciao.
Prova a togliere form2 dal form create.
Stai facendo riferimento ad una variabile globale quando la variabile non è stata valorizzata. Il puntatore dovrebbe essere ancora nello stack e non assegnato alla form2 globale.
Al massimo usa self nei casi dubbi.

Prova e fammi sapere.

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

petrusic

  • Hero Member
  • *****
  • Post: 591
  • Karma: +0/-0
Re:Dimensioni Form alterate
« Risposta #7 il: Febbraio 10, 2021, 05:30:27 pm »
Nei miei programmi, pochini fino ad ora, ho sempre lasciato come:
 "form creati automaticamente" , soltanto la Form1 (cioè la FormMain)
 "form disponibili", tutte le altre.
Quindi, anche nel programma corrente, la Form2, dove si presenta per il problema che ho esposto, è ben posizionata nella sezione "form disponibili".
Stai facendo riferimento ad una variabile globale quando la variabile non è stata valorizzata. Il puntatore dovrebbe essere ancora nello stack e non assegnato alla form2 globale.
Al massimo usa self nei casi dubbi.
Mi dispiace, ma sono ancora un principiante:
Non capisco come dovrei usare self

Ho però provato  a spostare le istruzioni
Codice: [Seleziona]
Form2.Width:= 1350;
Form2.Height:= 700;
dalla procedura TForm2.FormCreate alla TForm2.FormActivate, in modo da trovare la form già istanziata, ma già all'esecuzione della
Codice: [Seleziona]
  Form2.Width:= qualsiasi_valore;
 
si manifesta l'eccezione External.
ciao ciao

bonmario

  • Hero Member
  • *****
  • Post: 1302
  • Karma: +10/-1
Re:Dimensioni Form alterate
« Risposta #8 il: Febbraio 10, 2021, 06:11:29 pm »
Ok, allora il problema è che quando vai ad usate Form2, non hai ancora creato Form2.

Nel Form1, dovresti fare qualcosa del genere:
Codice: [Seleziona]
            Application.CreateForm(TForm2, Form2);
              Form2.ShowModal;
            FreeAndNil(Form2);

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Dimensioni Form alterate
« Risposta #9 il: Febbraio 10, 2021, 06:37:13 pm »
Codice: [Seleziona]
...
begin
Self.Width:= 1350;
Self.Height:= 700;
....
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

petrusic

  • Hero Member
  • *****
  • Post: 591
  • Karma: +0/-0
Re:Dimensioni Form alterate
« Risposta #10 il: Febbraio 10, 2021, 11:16:14 pm »
Codice: [Seleziona]
...
begin
Self.Width:= 1350;
Self.Height:= 700;
....
Scusa, ma non avevo capito.
Modificando il codice come mi hai indicato tu, l'ERRORE non si manifesta più, anche eseguendolo nella procedura " TForm2.FormCreate".
Ok, allora il problema è che quando vai ad usate Form2, non hai ancora creato Form2.

Nel Form1, dovresti fare qualcosa del genere:
Codice: [Seleziona]
            Application.CreateForm(TForm2, Form2);
              Form2.ShowModal;
            FreeAndNil(Form2);
Si, io ho utilizzato in questo programma:
Codice: [Seleziona]
 frm2:= TForm2.Create(Application);
   frm2.Showmodal;
   frm2.Close;           

di cui la prima è la stessa che mi suggerisci tu, anche se scritta in altro modo, mentre l'ultima dovrebbe agire come distruttore della Form2. Comunque ci lavorerò, per capire bene.
ciao ciao

bonmario

  • Hero Member
  • *****
  • Post: 1302
  • Karma: +10/-1
Re:Dimensioni Form alterate
« Risposta #11 il: Febbraio 11, 2021, 07:59:38 am »
O segui la strada che ti ha indicato Stilgar, che secondo me è la più corretta, oppure potrai notare che la variabile con cui crei il form l'hai chiamata "frm2", quella con cui ne cambi le dimensioni, l'hai chiamata invece "Form2". Questo non va bene: i 2 nomi devono essere uguali.

Ciao, Mario

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Dimensioni Form alterate
« Risposta #12 il: Febbraio 11, 2021, 08:40:42 am »
L'errore nella FormCreate è un errore dovuto al fatto che il puntatore Form2 non è ancora stato valorizzato con l'indirizzo in memoria della form che stai creando.
Self, è un "riferimento" che dice di lavorare con il puntatore dell'istanza attuale (quindi la form che stai instanziando).
La OnCreate è una callback che viene invocata durante la creazione, quindi non sei ancora uscito dal processo di creazione. Di conseguenza l'uso di Form2 non è corretto in quel punto.

Il fatto di usare direttamente la TForm2.Create, potrebbe portati ad incontrare altri problemi nel tempo.
TApplication.CreateForm non esegue solo la creazione delle TForm/TDataModule, fa altre operazioni nel mezzo. (Se la cosa ti incuriosisce basta un ctrl+click sul metodo e i sorgenti sono disponibili)


Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Dimensioni Form alterate
« Risposta #13 il: Febbraio 11, 2021, 08:42:29 am »
Per la distruzione automatica, prova a controllare OnClose.
Dovrebbe permetterti di indicare la distruzione della memoria dopo la chiusura.




Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

petrusic

  • Hero Member
  • *****
  • Post: 591
  • Karma: +0/-0
Re:Dimensioni Form alterate
« Risposta #14 il: Febbraio 11, 2021, 11:56:13 am »
Finalmente credo di aver capito.
Perciò, alla fine ho seguito il consiglio di  Stilgar:
Codice: [Seleziona]
procedure TForm2.FormCreate(Sender: TObject);
var
  begin
     Self.Width:= 1350;
     Self.Height:= 700;
... bla ... bla ...
e possiamo così concludere.

Per il problema del distruttore della Form modale, credo sia corretto aprire un'altra discussione, dove riporto i post da cui è cominciata, non volendolo, la questione.

ciao ciao

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18784
  • Topic in totale: 2236
  • Online Today: 543
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 516
Total: 516

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.