Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Febbraio 09, 2025, 06:46:06 pm

Titolo: [Risolto] StringGrid: modificare altezza Riga di Testa tramite mouse
Inserito da: petrusic - Febbraio 09, 2025, 06:46:06 pm
A causa della lunghezza del testo riportato dentro una o più celle  della riga di testa di una StringGrid, non riesco a leggere tutto il contenuto della/delle cella/celle.
Mentre riesco a modificare l'ampiezza delle colonne, per quanto concerne le righe posso agire col mouse solamente sulle righe NON fixed.
Per leggere, perciò, il testo scritto dentro una cella della riga di testa, posso agire solamente col mouse sull'ampiezza della colonna a cui la cella appartiene.

Io non credo che sia una barriera invalicabile. Penso che sono sicuramente io  a non riuscire a trovare la soluzione.

Allora, come fare?
Titolo: Re:StringGrid: modificare altezza Riga di Testa tramite mouse
Inserito da: DragoRosso - Febbraio 09, 2025, 10:54:31 pm
Vado a memoria:

Codice: [Seleziona]
StringGrid1.RowHeights[numerodellariga] := Altezza;
Titolo: Re:StringGrid: modificare altezza Riga di Testa tramite mouse
Inserito da: petrusic - Febbraio 10, 2025, 05:10:46 pm
Vado a memoria:
Codice: [Seleziona]
StringGrid1.RowHeights[numerodellariga] := Altezza;

Ma quella che mi suggerisci tu è una modifica che dimensiona una nuova altezza della riga, non dipendente quindi da un'indagine istantanea pi ampia di una cella durante l'esecuzione del programma,

Io non devo fare intervenire il programmatore, ma sfruttare l'elasticità dinamica dell'ambiente, col programma in esecuzione, ad esclusivo uso dell'utente, secondo le sue necessità di lavoro.
Titolo: Re:StringGrid: modificare altezza Riga di Testa tramite mouse
Inserito da: DragoRosso - Febbraio 10, 2025, 06:13:53 pm
Ma quella che mi suggerisci tu è una modifica che dimensiona una nuova altezza della riga, non dipendente quindi da un'indagine istantanea pi ampia di una cella durante l'esecuzione del programma,

Io non devo fare intervenire il programmatore, ma sfruttare l'elasticità dinamica dell'ambiente, col programma in esecuzione, ad esclusivo uso dell'utente, secondo le sue necessità di lavoro.

Ehilalà ... caspita addirittura un adattamento al volo stile Excel ...

Per fare ciò che chiedi si può fare. E di base lo stai già facendo quando scorri le celle per "colorarne" il contenuto.

Quando vai scrivere il contenuto nell'evento OnDraw (o PrepareDraw o qualcosa di simile) devi verificare quanti caratteri occupa la tua stringa e in base a quanto spazio hai nella cella definisci la sua altezza (che in realtà poi diventa della riga intera).

Quindi se una cella deve ampliarsi, semplicemente setti quel valore nuovo.

Semplice no ?
Titolo: Re:StringGrid: modificare altezza Riga di Testa tramite mouse
Inserito da: DragoRosso - Febbraio 10, 2025, 07:17:26 pm
Però c'è una soluzione ancora più semplice, visto da questo link: https://wiki.freepascal.org/Grids_Reference_Page (https://wiki.freepascal.org/Grids_Reference_Page)

Esempio tradotto da google ...

Codice: [Seleziona]
Multilinea nelle giglie

Questo esempio mostra come fare testo multilinea nella cella [3,2]. Funziona allo stesso modo per DBGrid in cui OnPrepareCanvas ha parametri per trattare con TColumns e da lì con TFields.

procedure TForm1.StringGrid1PrepareCanvas(sender: TObject; aCol, aRow: Integer;
  aState: TGridDrawState);
var
  MyTextStyle: TTextStyle;
begin
  if (aRow=2) or (aCol=3) then
  begin
    MyTextStyle := StringGrid1.Canvas.TextStyle;
    MyTextStyle.SingleLine := false;
    StringGrid1.Canvas.TextStyle := MyTextStyle;
  end;
end;
Titolo: Re:StringGrid: modificare altezza Riga di Testa tramite mouse
Inserito da: petrusic - Febbraio 11, 2025, 04:21:55 pm
Però c'è una soluzione ancora più semplice, visto da questo link: https://wiki.freepascal.org/Grids_Reference_Page (https://wiki.freepascal.org/Grids_Reference_Page)
:-[

E' vero, c'è di mezzo sempre il solito metodo Canvas che io non ho ancora digerito, pur avendoc sbattuto contro in diverse occasioni.

Si , funziona.  :D   Grazie.