* * * *

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.
Giugno 15, 2025, 08:31:09 pm

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

175 Visitatori, 0 Utenti

Post recenti

Pagine: 1 ... 6 7 [8] 9 10
71
Generale / Re:StringGrid Colonne nascoste
« Ultimo post da DragoRosso il Maggio 05, 2025, 03:15:29 pm »
Il meccanismo funzionava fino a 2 o 3 giorni fa. Ora non funziona più. Ma ciò non riguarda questa discussione.
 >:(

(StringGrid1) -> Options ... SPUNTA goRowSizing, goColSizing nell' Object Inspector
72
Generale / Re:StringGrid Colonne nascoste
« Ultimo post da petrusic il Maggio 05, 2025, 03:09:33 pm »
@ DragoRosso

Si, tutto vero. L'ho anche indicato nella mia risposta  di  prima. In ogni caso bisogna che metta di nuovo le mani nelle porzioni di codice che si occupano dei relativa caricamenti.

Come detto prima, ci devo pensare.

Per ora devo capire come variare la larghezze di una o più colonne col mouse, da utente finale.
Il meccanismo funzionava fino a 2 o 3 giorni fa. Ora non funziona più. Ma ciò non riguarda questa discussione.
 >:(
73
Generale / Re:StringGrid Colonne nascoste
« Ultimo post da DragoRosso il Maggio 05, 2025, 02:52:05 pm »
Ciao @petrusic.

Dal punto di vista generale, tendenzialmente non si usa una "stringgrid" per contenere dati (formule o altro) come fosse un foglio Excel.
Accennava @CompilaQuindiVa che quei dati possono essere raccolti altrove (ad esempio in un array a due dimensioni che simula riga e colonna per i dati eccedenti).

E in effetti questa potrebbe essere sicuramente la soluzione più semplice. Poi ovviamente è necessario vedere il tuo contesto, ad esempio se quei dati necessitano di svariate modifiche e quindi è necessario presentarli comunque in modalità grafica.

Ti ricordo che, come hai fatto nel passato nel personalizzare il riempimento della StringGrid, puoi sempre non "disegnare" quelle colonne lasciando a vuoto il valore in caso ad esempio di uso utente, e di visualizzarne il contenuto in caso di "progettazione". In questo caso l'uso di un semplice array esterno ti facilita le cose.

Complessità delle operazioni, a cui giustamente tu accenni: prova a fare un pensiero a delle procedure (o funzioni) che facciano il lavoro "sporco", non sei tu a codice che riempi 1, 2 tabelle o n array, è la tua procedura che lo fà in fase di riempimento o lettura della stringgrid senza doverti preoccupare di dover fare queste operazioni da tutti i "punti" in cui inserisci i dati.

Esempio:

Codice: [Seleziona]
type
  TStringGrid1 = Class(TStringGrid)
        ....
        ....
     public
        procedure RiempiGriglia(.........);
  end;

var StringGrid1: TStrinGrid;
      stringarray:  array of array of string; //Devi dimensionare da qualche parte l'array prima di usarlo
      USOPROGETTAZIONE: boolean = False;      /SE messo a TRUE indica che i dati devono essere visualizzati in griglia

...........
...........

procedure TStringGrid1.RiempiGriglia(.........);
begin
   //Qui non faccio i controlli di coerenza .... devi farli tu in base ai tuoi dati.
   //Il tutto può ovviamente evolversi.

   .......
   .......

   //Col e Row indicano la cella che devi riempire
   //ColDaNascodere indica il numero massimo di colonne da visualizzare

   if (not USOPROGETTAZIONE) and (Col >= ColDaNascondere)  then
     begin
        //Inseriamo i dati nell'array invece che nella griglia
        stringarray[Col-ColDaNascondere][Row] := DATO_DA_INSERIRE;
     end
   esle
     begin
        //Inseriamo i dati nella griglia
        StringGrid1.Cells[Col, Row] := DATO_DA_INSERIRE;
     end;
end;

Oltre a questo, c'è la gestione come accennato del ridimensionamento dell'array a runtime (sia in costruzione / modifica / distruzione), del suo svuotamento preliminare quando carichi una griglia nuova, e della operazione opposta ossia della lettura dei dati per la loro memorizzazione dall'array o dalla griglia in base all'uso utente o progettazione.
74
Generale / Re:StringGrid Colonne nascoste
« Ultimo post da petrusic il Maggio 05, 2025, 01:06:51 pm »
Grazie.
quella che ti sto per descrivere, è una soluzione che avevo trovato anni fa,
 . . .
in pratica imposto la loro larghezza a 0:
. . .
Non ci avevo pensato, però l'Utente può sempre aumentare la larghezza delle colonne e leggere dati per lui non significativi.

. . .
C'è anche un altro aspetto da considerare: usare la griglia come "storage" per i tuoi dati incentiverebbe troppo la scrittura di codice legata eccessivamente a elementi dell'interfaccia utente, che come tali si portano dietro API, routine e altre risorse (in generale, dipendenze) che dovresti sempre "linkare" anche se il tuo unico scopo magari è quello di mantenere dati in memoria.

Prova a fare una riflessione in merito,
. . .
La soluzione:
Ampiezza colonna = 0
 non mi piace perchè in realtà non nascondo le colonne, allora tanto varrebbe impostare anche, nel progetto definitivo'  il colore del testo uguale a quello dello sfondo, quanto meno le colonne restano visibili ma sembrano vuote.

La soluzione:
 Pensare allo spreco di memoria usando la StringGrid come se fosse una tabella
 è pesante, lo so, ma quando l'ho pensata, mi è sembrata pratica da impegare ed ora mi divenma oneroso modiicarla

Volendo metterla in pratica, si potrebbe:
1) Riorganizzare i dati in modo da distribuirli fra quelli utili solo per l'utente finale e quelli utili solo per la programmazione.
    -- Però mi sembra farraginosa da gestire.
2) Costruire una tabella di interfaccia, che contenga sia i dati utili all'Utente finale, sia tutti gli altri e scrivere ciascuna riga della StringGrid copiando nelle celle corrispondenti soltanto gli elementi utili all'Utente finale.
      -- Anche questa impegna non poco per adottarla.

Ci ragionerò sopra.
Grazie ancora.

75
Presentazioni nuovi utenti / Re:Un saluto a tutti! 👋
« Ultimo post da CompilaQuindiVa il Maggio 05, 2025, 11:56:31 am »
benvenuto nel forum
Grazie! 🤗

qua le idee pazze non mancano  :D
Ottimo saperlo! Sono sicuro che prenderò ben più di uno spunto per cose nuove da provare...  :)
76
Presentazioni nuovi utenti / Re:Un saluto a tutti! 👋
« Ultimo post da CompilaQuindiVa il Maggio 05, 2025, 11:55:23 am »
Ciao Marco e benvenuto. Mi ha fatto estremo piacere che ti sei unito a noi dopo che hai letto quel mio commento su linkedin.

Grazie! Almeno questo mitiga un pochino la mia "colpevolezza" nel non essermi aggiunto prima.  ;D
77
Presentazioni nuovi utenti / Re:Un saluto a tutti! 👋
« Ultimo post da CompilaQuindiVa il Maggio 05, 2025, 11:54:40 am »
Ciao Marco e benvenuto.
E' un vero onore averti nel forum. La tua notorietà ti precede.
Addirittura? Lusingato!

Ho seguito svariati tuoi post sui forum che segui (e devo dire che ogni tanto anche su "narkive" salta fuori qualche tua perla).
Ero giovane e inesperto allora.  ::)
Ma anche oggi.......  ;D

Grazie per la tua passione per il Pascal e per il tuo impegno nella divulgazione "informata" su tale linguaggio. Tu e il tuo omonimo (... Cantu ...) siete sicuramente tra gli assi portanti in Italia e probabilmente anche all'estero.
Io alla fine faccio pochissimo in relazione all'apporto che danno altre persone, ma dedico alla divulgazione (se così possiamo chiamarla, perché alla fine è sperimentazione pura) solo il poco tempo libero che ho a disposizione. L'obiettivo primario è più frequentemente quello di incentivare chi fa queste cose mooolto meglio di me a divulgare a loro volta. ;D

Alla prossima.
A presto e grazie per il graditissimo saluto e accoglimento! 👋
78
Generale / Re:StringGrid Colonne nascoste
« Ultimo post da CompilaQuindiVa il Maggio 05, 2025, 11:49:50 am »
La mia StringGrid corrente è formata da 24 colonne.
Di esse vorrei lasciare visibili solamente le prime 7, perchè le successive contengono dati utili solo per la programmazione.

Ciao, stavo riflettendo sulla parte del tuo messaggio in cui hai specificato "dati utili solo per la programmazione". :)

Mi fa pensare che il controllo StringGrid che stai utilizzando visualizzi informazioni a partire da una struttura dati già esistente (tabella, lista, ecc.), recuperata in precedenza: se questo è vero, perché non togliere queste informazioni che non devono essere visualizzate dalla griglia e mantenere una sorta di "riferimento" (indice della riga, campo ID, ecc.) all'interno della griglia stessa, facendo sì che tramite questo dato si possa risalire alla struttura in memoria che contiene tutte le altre informazioni?

Metti anche il caso in cui, in futuro, tu debba memorizzare per le righe dati che non sono "piatti", ossia organizzati in un solo livello, ma più strutturati e quindi difficilmente rappresentabili in termini di colonne, questo approccio ti consentirebbe di farlo, mentre la memorizzazione all'interno della griglia da questo punto di vista ti limiterebbe enormemente.

C'è anche un altro aspetto da considerare: usare la griglia come "storage" per i tuoi dati incentiverebbe troppo la scrittura di codice legata eccessivamente a elementi dell'interfaccia utente, che come tali si portano dietro API, routine e altre risorse (in generale, dipendenze) che dovresti sempre "linkare" anche se il tuo unico scopo magari è quello di mantenere dati in memoria.

Prova a fare una riflessione in merito, poi suppongo che altri utenti possano darti consigli più specifici in proposito.

Certo, lo scenario è più complesso di quello attuale, quindi la scelta di "azzerare" la larghezza della colonna può essere una soluzione "secca e dura", come si suol dire, valida nel suo contesto. :)

Un saluto! 👋
79
Generale / Re:StringGrid Colonne nascoste
« Ultimo post da bonmario il Maggio 05, 2025, 11:38:08 am »
Ciao,
quella che ti sto per descrivere, è una soluzione che avevo trovato anni fa, non ricordo i motivi, e può anche essere che nel frattempo le cose siano cambiate, ma oramai mi sono abituato così :)

Questo il codice che uso a programma per nascondere le colonne, in pratica imposto la loro larghezza a 0:
Codice: [Seleziona]
WrkStringGrid.ColWidths[NumCol]:=0;

dove WrkStringGrid è il nome della tua StringGrid, e  NumCol è il numero della colonna che vuoi nascondere. Occhio che la prima colonna è la colonna 0, e così via.


Il difetto di questa soluzione, è che se uno sa che c'è questa cosa, potrebbe "allargare" la colonna col mouse, come si fa normalmente in "Esplora risorse" o simili

Ciao, Mario
80
Lazarus e il web / Re:Servizio api rest
« Ultimo post da DragoRosso il Maggio 05, 2025, 11:15:01 am »
Il problema di apertura del display l'ho risolto installando il demone come user demone e impostando la partenza del servizio solo dopo l'apertura la creazione della sessione grafica.
Il "problema del display" non sappiamo quale è ... non ne hai accennato.

Come commento, anche se ciò che hai fatto è lecito (almeno in Linux), far dipendere un servizio dalla sessione grafica non è una buona cosa ... ovviamente a meno che il servizio non necessiti esplicitamente della sessione grafica, cosa che un servizio normale non ha.

Il cambio tra X11 e Wayland e gli stessi aggiornamenti di Wayland (che non è ancora stabile) potrebbero influire sul funzionamento del servizio in qualsiasi momento. Non da meno eventuali aggiornamenti o mantenimento di librerie di default. Diverse distribuzioni di Linux stanno "ragionando" se mantenerle o meno, per cui ti potresti trovare con una macchina nuova apparentemente identica a quella "vecchia" che però ... non funziona.

Detto questo ti auguro buon lavoro.
Pagine: 1 ... 6 7 [8] 9 10

Recenti

How To

Utenti
Stats
  • Post in totale: 19818
  • Topic in totale: 2384
  • Online Today: 190
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 175
Total: 175

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.