* * * *

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.
Febbraio 20, 2025, 08:12:43 pm

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

95 Visitatori, 0 Utenti

Autore Topic: rinominare un oggetto  (Letto 348 volte)

suibaf

  • Newbie
  • *
  • Post: 15
  • Karma: +0/-0
rinominare un oggetto
« il: Febbraio 09, 2025, 09:47:07 pm »
Salve,
stò lavorando, a livello amatoriale, su Lazarus e stò prendendo confidenza con l'ambiente. (4.0RC2).
Stò cercando di fare il porting di un vecchio software scritto in un altro linguaggio.
Apparte la manualità di alcuni processi:
-  dover lavorare sui distruttori;
- mi sembra non ci sia un garbage collector;
- ho dovuto rinominare un pulsante e ho duvuto cercare manualmente e rinominare il pulsante ovunque.
Mi piacerebbe saper se sono io che ancora non conosco l'ambieente oppure devvo lavorare davvero a mano per effettuare questa semplice operazione.
Grazie mille

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1503
  • Karma: +45/-0
  • Prima ascoltare, poi decidere
Re:rinominare un oggetto
« Risposta #1 il: Febbraio 09, 2025, 11:38:37 pm »
Ti rispondo su alcune cose, non conosco troppo bene l'ambiente per poterti aiutare completamente su ciò che hai chiesto.

Il Pascal (quindi Lazarus, Delphi, etc ...) non ha un garbage collector, le risorse vengono deallocate immediatamente.

Per tutti i shortcut vai qui: https://wiki.freepascal.org/Lazarus_IDE_Shortcuts

Per quello che riguarda la rinominazione di una entità, se vai sulla entità da rinominare e clicchi con il tasto dx del mouse ti compare un menu, e una delle voci è "REFACTORING" ... li trovi ciò che ti serve.

Quando crei un nuovo metodo in una classe, se lo definisci prima nella sezione interface (cioè devo la classe viene definita) premendo <CTRL> <SHIFT> D    l'IDE ti crea l'implementazione nella sezione implementation.

Per quello che riguarda i distruttori, le classi devono averli solo se all'interno della classe stessa crei (il termine tecnico è ISTANZI) delle risorse che non hanno come "parente" la classe stessa e non le liberi prima che la classe venga "distrutta".

Giusto per farti capire, la tua Form principale e tutti i suoi componenti di base non hanno un distruttore dichiarato, eppure sono istanziate e non c'è alcun leak senza distruttori quando chiudi l'applicazione.

Le variabili di tipo numerico, stringa o record non vanno distrutte e quindi il loro uso non implica l'uso di un eventuale distruttore. Per le variabili di tipo puntatore generico a cui sono assegnate delle risorse vanno liberate le risorse, non la variabile stessa. Ciò si fà eseguendo un cast o con la parolina "as" (che identifica un cast con la sintassi del Pascal) o dereferenziando la variabile stessa (con il carattere ^).

Le variabili di tipo "array non statico" devono essere poste a zero come lunghezza oppure eguagliate a nil, tenendo presente che il loro contenuto và liberato prima se non è un tipo "integrale". Cioè se l'array è un array di classi ad esempio, ovviamente ogni singolo elemento dell'array và "liberato" prima di eliminare l'array stesso.

Anche per i record valgono le stesse precauzioni: il record di per sè non deve essere liberato esplicitamente ma se qualche membro di un record non è il solito tipo intergale allora questo deve essere distrutto prima.

Come tutti i linguaggi, è necessario conoscerne la specificità per ottenere il massimo con il minimo sforzo. E il Pascal ha la curva di apprendimento migliore di tutti i linguaggi, quindi con un minimo di esperienza potrai sicuramente trovarti più a tuo agio.

Ciao
« Ultima modifica: Febbraio 09, 2025, 11:42:09 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2961
  • Karma: +20/-4
Re:rinominare un oggetto
« Risposta #2 il: Febbraio 11, 2025, 09:19:59 am »
Per quello che riguarda la rinominazione di una entità, se vai sulla entità da rinominare e clicchi con il tasto dx del mouse ti compare un menu, e una delle voci è "REFACTORING" ... li trovi ciò che ti serve.

Per praticità:
I controlli grafici (tipo appunto i bottoni) li puoi rinominare con l'Object Inspector modificando la proprietà "Name": confermando, verranno rinominati anche tutti i metodi e gli eventi.

Per le variabili segui le indicazioni di DragoRosso ma, per praticità, ti posso dire che il tasto F2 sopra il nome di una variabile, normalmente risolve alla grande in tutto il sorgente.
« Ultima modifica: Febbraio 11, 2025, 09:36:29 am da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

suibaf

  • Newbie
  • *
  • Post: 15
  • Karma: +0/-0
Re:rinominare un oggetto
« Risposta #3 il: Febbraio 11, 2025, 09:17:12 pm »
Intanto veramente grazie per le risposte e complimenti! Per gioco ho fatto la stessa domanda a ChatGpt. Segue la risposta:

Lazarus, essendo basato su Free Pascal, non ha un garbage collector come i linguaggi moderni tipo Java o Python. La gestione della memoria è manuale, quindi devi occuparti tu di creare e distruggere gli oggetti nel modo corretto.

Risposte ai tuoi dubbi:
Gestione della memoria e distruttori

Sì, devi gestire manualmente gli oggetti creati dinamicamente (con Create e Free o FreeAndNil).
Se un oggetto è assegnato a un TComponent con un Owner, viene liberato automaticamente quando l'Owner viene distrutto.
Se non usi un Owner, devi liberare la memoria manualmente.
Rinominare un componente (pulsante) manualmente

In teoria, Lazarus dovrebbe gestire il Refactoring automatico come in altri IDE, ma attualmente questa funzione è limitata.
Se cambi il nome di un componente nell'Object Inspector, Lazarus non aggiorna automaticamente tutti i riferimenti nel codice. Devi farlo tu.
Soluzione alternativa: Puoi usare la funzione "Trova e sostituisci" (Ctrl + H) nell'IDE per velocizzare il processo.
Funzioni che possono aiutarti

Se rinomini un componente e il progetto non è troppo grande, prova la funzione di "Rinomina" (Refactor > Rename Identifier), ma a volte ha problemi.
Usa Find Declaration (Ctrl + Click sul nome del componente) per individuare dove è usato.
Se il nome è usato in molte unità, puoi usare la ricerca su tutto il progetto (Ctrl + Shift + F).
Purtroppo, Lazarus non ha lo stesso livello di automazione di altri IDE moderni come Delphi, quindi sì, alcuni passaggi vanno fatti a mano. Però, con gli strumenti giusti, puoi ridurre il lavoro manuale. 😊

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2961
  • Karma: +20/-4
Re:rinominare un oggetto
« Risposta #4 il: Febbraio 12, 2025, 09:38:34 am »
uhm...
secondo me gli hanno gli fatto fare il deep learning nei forum di embarcadero  ;D

comunque ci sono molte altre cose da dire sulla liberazione delle risorse in Free Pascal

si può usare il reference counting delle interfacce
oppure usare le liste di oggetti che assumono l'ownership degli oggetti contenuti

ci sono anche delle discussioni come questa che segue (ma anche altro), che però di consiglio di sperimentare quando avrai un po' più di padronanza con lazarus/fpc
https://forum.lazarus.freepascal.org/index.php?topic=37524.0

quello che ti poso dire è che la mancanza del garbage collector non è poi così drammatica, anzi :)
semplicemente ci sono altri meccanismi per fare quello che fa un gc ma che vanno in funzione esattamente quando serve
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1503
  • Karma: +45/-0
  • Prima ascoltare, poi decidere
Re:rinominare un oggetto
« Risposta #5 il: Febbraio 12, 2025, 10:00:21 am »
Mi associo a quanto detto da @nomorelogic.

Il garbage collector è secondo me un impiccio, parlo in termini generali. Meglio avere prontezza della situazione e con il Pascal c'è l'hai.

Puoi fare interi programmi costruendo classi, metodo, oggetti vari, etc ... senza chiamare alcun distruttore (sul ns. blog c'è l'esempio sulle interfacce).
Le tecniche per fare questo sono le più varie, è necessario solo capire come funzionano i principi di allocazione, istanza, referenza, liberazione, scopo e vita di un oggetto, reference counting.

Ma pian piano vedrai che tutto ciò sarà semplicemente normale e non ci penserai su più.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1503
  • Karma: +45/-0
  • Prima ascoltare, poi decidere
Re:rinominare un oggetto
« Risposta #6 il: Febbraio 12, 2025, 10:03:59 am »
uhm...
secondo me gli hanno gli fatto fare il deep learning nei forum di embarcadero  ;D

Quale posto migliore per istruire una "intelligenza" sul Pascal ?  ;D ;D ;D
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2391
  • Karma: +10/-0
Re:rinominare un oggetto
« Risposta #7 il: Febbraio 18, 2025, 04:02:47 pm »
Anche no.
Poi ci pensa l'AI a scrivere i programmi.
Come allenare il tuo boia a farti fuori ... ;D ;D ;D ;D
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1503
  • Karma: +45/-0
  • Prima ascoltare, poi decidere
Re:rinominare un oggetto
« Risposta #8 il: Febbraio 19, 2025, 04:00:54 pm »
Anche no.
Poi ci pensa l'AI a scrivere i programmi.
Come allenare il tuo boia a farti fuori ... ;D ;D ;D ;D

OT ESTREMO, ma lasciatemi questa libertà ...

Hi, hi, hi il boia difetta dell'arma. Una IA, per ora, non riesce e secondo me non riuscirà a breve e neanche a medio termine a fornire un progetto completo. Lo fà, ma è imbarazzante, con progetti noti mettendoci del suo e facendo si che ciò che fornisce sia inutile.
Il programmatore servirà sempre e comunque. Il ruolo dello stesso forse cambierà, però "non c'è mai un male che non sia anche un bene" (proverbio della mia regione), per dire che forse sia andrà in realtà in meglio per noi.

Ciò che vedo invece come pericolo, oltre alla manomissione della realtà filtrata dalla IA, è la "presa" di ogni informazione come la parola di DIO in terra. Se frequentate i forum vedrete sempre più spesso gente che propone soluzioni copiate pari pari da una IA, affermando che se l'ha "detto" lei allora sarà così.

Poi a livello di posti di lavoro, direi che chi ci perderà saranno sicuramente tutti i lavori impiegatizi: pensate alle segretarie ... dove c'è ne una magari non ci saranno problemi, ma dove ce ne sono molte ... il lavoro "impiegatizio" la IA lo svolge bene e quasi perfettamente, non serviranno più 5-10-20 ... segretarie ma solo un decimo e forse anche meno.

Più che per i programmatori il problema si riverserà su altri fronti sociali e allora si che saranno dolori.

Comunque vedremo dai. Vi lascio in compagnia dell'inno del programmatore, caso mai ve la foste persa.

Questo è un link della versione teatrale, solo per i forti di stomaco  ;D :https://www.youtube.com/watch?v=FRdAbptTJ40

Questa è la versione dell'autore originale (cambia solo il video): https://www.youtube.com/watch?v=w5y_oR20DEI
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 809
  • Latest: angman
Stats
  • Post in totale: 19496
  • Topic in totale: 2338
  • Online Today: 141
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 95
Total: 95

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.