* * * *

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 05, 2025, 04:36:52 pm

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

142 Visitatori, 1 Utente
 

Autore Topic: StringGrid Colonne nascoste  (Letto 44 volte)

petrusic

  • Hero Member
  • *****
  • Post: 661
  • Karma: +0/-0
StringGrid Colonne nascoste
« il: Oggi alle 09:49:07 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.
Avevo pensato perciò di renderle tutte abilitate ma NON Visibili.
Ho scoperto però che impostando la proprietà "Visible= False", le colonne vengono anche disabilitate.

Dopo tale scoperta l'unica alternativa percorribile è quella di creare una tabella bidimensionale che riporti al suo interno l'intera StringGrid.

Una tale gestione però mi complicherebbe molto la vita, perchè impegnerei intanto tanta memoria in più di quella effettivamente necessaria e poi, perchè dovrei ogni volta portare un doppio aggiornamento, uno sulla StrngGrid ed una sul corrispondente elemento della tabella.

Dal mio punto di vista di programmatore, non capisco come mai non sia possibile impostare la proprietà Enabled per le colonne componenti la StringGrid.

???
ciao ciao

bonmario

  • Hero Member
  • *****
  • Post: 1406
  • Karma: +11/-1
Re:StringGrid Colonne nascoste
« Risposta #1 il: Oggi alle 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

CompilaQuindiVa

  • Newbie
  • *
  • Post: 5
  • Karma: +0/-0
  • Developer, Trainer & Content Creator
    • Tutti i miei link
Re:StringGrid Colonne nascoste
« Risposta #2 il: Oggi alle 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! 👋
MARCO BREVEGLIERI
Software Developer 👨‍💻 | Trainer & Consultant 👨‍🏫 | Tech Content Creator 🎥

👉 Tutti i miei link e profili social

petrusic

  • Hero Member
  • *****
  • Post: 661
  • Karma: +0/-0
Re:StringGrid Colonne nascoste
« Risposta #3 il: Oggi alle 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.

ciao ciao

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1569
  • Karma: +46/-0
  • Prima ascoltare, poi decidere
Re:StringGrid Colonne nascoste
« Risposta #4 il: Oggi alle 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.
« Ultima modifica: Oggi alle 03:03:17 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

petrusic

  • Hero Member
  • *****
  • Post: 661
  • Karma: +0/-0
Re:StringGrid Colonne nascoste
« Risposta #5 il: Oggi alle 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.
 >:(
ciao ciao

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1569
  • Karma: +46/-0
  • Prima ascoltare, poi decidere
Re:StringGrid Colonne nascoste
« Risposta #6 il: Oggi alle 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
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 821
  • Latest: Dysonzux
Stats
  • Post in totale: 19749
  • Topic in totale: 2373
  • Online Today: 174
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 1
Guests: 142
Total: 143

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.