Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Marzo 12, 2022, 06:30:37 pm

Titolo: [Risolto] stringGrid: titoli mancanti e non solo
Inserito da: petrusic - Marzo 12, 2022, 06:30:37 pm
Allego un'immagine di parte della StringGrid che si sta beffando di me.

1) Nelle colonne 1, 2, 3 mancano i titoli di testata, pur avendoli impostati all'interno del codice, così come ho impostato anche tutti gli altri.
2) La larghezza delle colonne è fissa e non posso assolutamente nè aumentare, nè ridurre l'ampiezza.
3) Manca la barra orizzontale per lo spostamento verso destra o verso sinistra della parte di griglia visibile. C'è invece quella verticale.

Sono tutte anomalie che non riesco a capire, soprattutto la prima. Allego un'immagine dimostrativa.
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: sergio - Marzo 12, 2022, 07:27:45 pm
Ciao , riesci mica a postare il codice ? Che versione hai di lazarus ?
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: petrusic - Marzo 12, 2022, 10:13:34 pm
Ciao , riesci mica a postare il codice ? Che versione hai di lazarus ?
Comincio dalla 2a domanda: Lazarus 2.2.0
il codice prepara solo i titoli delle colonne 2 e 3, perché la col.1 è stata impostata in fase di disegno anche nel titolo:
Codice: [Seleziona]
procedure FaiGridMovv();    // costruisce la griglia dei movimenti corrispondenti al contenuto della CBstriX.Text
var
  swOpenErro: Boolean = False;

  i, iRgGrid: Integer;

  coVoCorr, nuProEdt, sql, voceCorr: String;

begin
  case Form6.tipoRicerca of
    '0', '1', '2', '3', '4', '5', '6':
    begin
      Form6.Panel5.Width:= Form6.Width - 170;
      Form6.Panel5.Height:= Form1.Height - 130;
      Form6.GridMovvComune.Width:= Form6.Panel5.Width - 4;
      Form6.GridMovvComune.Height:= Form6.Panel5.Height - 8;
    end;
  end;
  case Form6.tipoRicerca of
    '0':   // Ricerca per: Descrizione(0)
    begin
      . . .
    end;
    '1', '2', '6':   // Ricerca per: Voci contabil1 di Cassa(1, 2,), Cmponente familiare(6)
    begin
    end;
    '3', '4', '5':
    begin
      Form6.GridMovvComune.Columns[1].Title.Caption:= 'D A R E';     // col.2
      Form6.GridMovvComune.Columns[2].Title.Caption:= 'A V E R E';   // col.3
      Form6.GridMovvComune.Columns[3].Title.Caption:= 'DESCRIZIONE';
      Form6.GridMovvComune.Columns[4].MaxSize:= 500;
      Form6.GridMovvComune.Columns[4].MinSize:= 350;
      Form6.GridMovvComune.Columns[4].Width:= 500;
      Form6.GridMovvComune.Columns[4].Alignment:= taLeftJustify;
      Form6.GridMovvComune.Columns[4].Title.Caption:= 'VOCE DI CONTROPARTITA';
      Form6.GridMovvComune.Columns[5].MaxSize:= 120;
      Form6.GridMovvComune.Columns[5].MinSize:= 120;
      Form6.GridMovvComune.Columns[5].Width:= 120;
      Form6.GridMovvComune.Columns[5].Alignment:= taCenter;
      Form6.GridMovvComune.Columns[5].Title.Caption:= 'CODICE VOCE';
      Form6.GridMovvComune.Columns[6].MaxSize:= 500;
      Form6.GridMovvComune.Columns[6].MinSize:= 350;
      Form6.GridMovvComune.Columns[6].Width:= 500;
      Form6.GridMovvComune.Columns[6].Alignment:= taLeftJustify;
      Form6.GridMovvComune.Columns[6].Title.Caption:= 'VOCE DI CASSA';
      Form6.GridMovvComune.Columns[7].MaxSize:= 120;
      Form6.GridMovvComune.Columns[7].MinSize:= 120;
      Form6.GridMovvComune.Columns[7].Width:= 120;
      Form6.GridMovvComune.Columns[7].Alignment:= taCenter;
      Form6.GridMovvComune.Columns[7].Title.Caption:= 'CODICE VOCE';
      Form6.GridMovvComune.Columns[7].Visible:= True;
    end;
  end;
Ho inserito solamente la porzione di codice che sto provando  (tipoRicerca = 4).
Poi dentro l'evento DrawCell imposto il colore di sfondo per le celle dei totali e del titolo (quest'ultimo, perché ho trovato cambiato anche quello col colore di sfondo delle celle coi totali  (**?**).
però, anche prima di detta modifica il testo non era visualizzato:
Codice: [Seleziona]
procedure TForm6.GridMovvComuneDrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
type
  Tsfondo = TColor;

const
  sfondoBlu: Tsfondo = clBlue;
  sfondoVerde: Tsfondo = $0080801C;   // Verde scuro
  sfondo: Tsfondo = clWindow;

var
  lun: Integer;
  ixRg: Integer = 0;

  cellaSel: String;

   allin : TTextStyle;    // tipo di allineamento
begin
  WriteLn('TForm6.GridMovvComuneDrawCell');
  case aCol of
    1, 2, 3:
    begin
      WriteLn('cella corrente = col.' + IntToStr(aCol) + ' - rg.' + IntToStr(aRow));
      if (GridMovvComune.Cells[1, aRow] = 'TOT.Sottoconto')  then
      begin
        sfondo:= sfondoVerde;
        ixRg:= aRow;
      end;
      if (GridMovvComune.Cells[1, aRow] = 'TOTALI Conto') or (GridMovvComune.Cells[1, aRow] = 'T O T A L I') then
      begin
        sfondo:= sfondoBlu;
        ixRg:= aRow
      end;
      if (aRow = 0) then
      begin
        sfondo:= clBtnFace;   //  Impostazione del colore di sfondo delle celle di testata delle colonne 1, 2, 3   (per tutte le altre il colore impostato in fase di disegno funziona)
        ixRg:= aRow
      end;
      cellaSel:= GridMovvComune.Cells[aCol, aRow];  // punta alla casella selezionata
      if (ixRg = aRow) then
      begin
        GridMovvComune.Canvas.Brush.Color := sfondo;
        GridMovvComune.Canvas.FillRect(aRect);
        GridMovvComune.Canvas.Font.Style:= [fsBold];
        GridMovvComune.Canvas.Font.Color:= clYellow;  // colora il testo
        allin.Alignment:= taRightJustify;
        GridMovvComune.Canvas.TextRect(aRect, aRect.Right - lun , aRect.Top, CellaSel, allin);
        if (aCol = 1) then
        begin
          GridMovvComune.Canvas.Font.Height:= 14;
        end
        else begin
          GridMovvComune.Canvas.Font.Height:= 11;
        end;
      end;
      ixRg:= 0;
    end;
  end;
end;
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: petrusic - Marzo 13, 2022, 07:31:38 am
Per l'impostazione dei titoli alle colonne 1, 2, 3, ho risolto, aggiungendo una if in testa all'evento OnDrawCell:
Codice: [Seleziona]
 if (aRow > 1) then  

Restano aperte le altre due questioni:
- L'ampiezza delle colonne non modificabile col mouse, durante la sua vista.
- La  mancanza la barra di scorrimento orizzontale della griglia a vista.

Per esse non so proprio come e dove intervenire.

Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: DragoRosso - Marzo 13, 2022, 01:54:43 pm
Restano aperte le altre due questioni:
- L'ampiezza delle colonne non modificabile col mouse, durante la sua vista.
- La  mancanza la barra di scorrimento orizzontale della griglia a vista.

Vedi allegati ....
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: petrusic - Marzo 13, 2022, 03:05:37 pm
@ DragoRosso

Ho verificato le impostazioni interne alla mia StringGrid e sono settate esattamente come mi hai ora indicato tu.
Veramente, non capisco.
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: sergio - Marzo 13, 2022, 05:50:13 pm
Ciao , hai impostato le opzioni '' goColMoving = True  e goColSizing = True  per l'ingrandimento e lo spostamento delle celle ?
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: DragoRosso - Marzo 13, 2022, 06:12:19 pm
@ DragoRosso
Ho verificato le impostazioni interne alla mia StringGrid e sono settate esattamente come mi hai ora indicato tu.
Veramente, non capisco.
Ho risposto in velocità, ma l'intenzione era di indicare quali proprietà interessavano il "problema", ovviamente quelle sono da impostare a true, come è da selezionare la modalità del bar scrolling.

Ciao , hai impostato le opzioni '' goColMoving = True  e goColSizing = True  per l'ingrandimento e lo spostamento delle celle ?

Non serve  goColMoving a True per ridimensinare le colonne. Quello ti consente di spostare le colonne di posizione ad esempio dalla terza alla quinta.

Ciao
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: petrusic - Marzo 13, 2022, 10:55:36 pm
Ho provato quanto mi avete suggerito. Ho anche provato quanto ho letto qui (https://lazarus-lazarus-freepascal-narkive-com.translate.goog/iaARjZ2S/stringgrid-options-gosmoothscroll-vs-gothumbtracking?_x_tr_sl=en&_x_tr_tl=it&_x_tr_hl=it&_x_tr_pto=sc) sulle barre di scorrimento, ma è stato tutto inutile.

Le colonne non si allargano, nè si restringono. Le barre di scorrimento non esistono proprio.
Ma non dovrebbero essere funzioni disponibili già di default?

Non vorrei che attivare le funzioni, secondo me, naturali di una griglia occorra installare un qualche pacchetto accessorio che io non ho.

Mi dispiace perchè nella prova odierna avrei dovuto poter scorrere 83 righe, invece riesco a vedere solamente le prime 36 righe
e le prime 6 colonne su 8.

Non riesco nemmeno a selezionare una cella per spostarmi poi in avanti e indietro.
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: DragoRosso - Marzo 13, 2022, 11:41:56 pm
Questo è un server Linux Ubuntu 20.04 con installato Lazarus / FPC come dal noto post (ora nel blog), esattamente come hai fatto tu. L'interfaccia grafica di Linux è LXQT (il server non ha il desktop di default).

Nessun pacchetto aggiuntivo, nemmeno zeos, TStringGrid inserita nella Form e attivato solo "goColSizing" dalle opzioni della TStringGrid. Per le barre di scorrimento la proprietà "scrollbars" è impostata a "ssBoth".

EDIT: intendo che quelli sono gli unici settaggi modificati rispetto al default del componente.

Questo è il risultato.

L'unico pacchetto aggiunto a mano in Linux è il GTK3+ (mi serve per altri ambienti).

Prova a fare un progetto nuovo, mettici la TStringGrid e setta solo le due proprietà come ti ho indicato.

Se funziona allora hai probabilmente nel progetto forse qualche cosa che "sporca" il componente.

Prova a creare un progetto nuovo in una directory nuova e inserisci le unit e le form del vecchio progetto, ricompilalo e vedi cosa succede.

Ciao

Ciao
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: petrusic - Marzo 14, 2022, 11:06:55 am
Penso di avere individuato il problema, anche se non ne capisco la manifestazione.

Ho fatto una modifica alla posizione della StringGrid:
Fino a ieri era posizionata dentro un Panel.

 Dopo il tuo ultimo suggerimento di prova, ho avviato un programmino, costruito tempo fa, proprio per provare la StringGrid, ed ho notato che le barre di scorrimento ci sono. Ho provato ad ampliare e stringere le colonne ed ha funzionato. Ho provato con soddisfazione anche a selezionare una casella della griglia: tutto funziona benissimo.

Ho segnato le impostazioni relative sulle opzioni e sono tornato al mio programma in lavorazione.
Ho spostato la StringGrid direttamente dentro la Form (fuori dal pannello, quindi). Ho settato le opzioni, secondo gli appunti presi prima:
goColSizing = True
goRangeSelect = True
goSmoothScroll = True
ScrollBars = ssAutoBoth

Ho avviato ed ho finalmente notato che funziona tutto perfettamente.

Ripeto: non capisco che c'entri la posizione della StringGrid rispetto al pannello, ma a me pare che Lazarus non riesca a gestire bene la StrngGrid se non è disegnata direttamente dentro la Form.
 :)
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: DragoRosso - Marzo 14, 2022, 12:22:16 pm
Faccio una verifica e ti comunico i risultati.

EDIT: La stringGrid "dentro" un pannello funziona esattamente come "dentro" una Form, fà il ridimensionamento delle colonne e mostra la barre si scorrimento.

P.S.: Ovviamente le barre vengono mostrate se la griglia è contenuta completamente dentro il pannello. Inoltre la griglia è "operativa" con i controlli sia da tatstiera che del mouse se il pannello ha la proprietà ENABLED impostata a TRUE ::)

Ciao
Titolo: Re:stringGrid: titoli mancanti e non solo
Inserito da: petrusic - Marzo 14, 2022, 03:15:24 pm
La stringGrid "dentro" un pannello funziona esattamente come "dentro" una Form, fà il ridimensionamento delle colonne e mostra la barre si scorrimento.

Prendo nota. In questa parte del programma sono già avanti e va bene come ho fatto la modifica. Riproverò con più attenzione alla prossima StrringGrid.
 ;)