Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Febbraio 24, 2022, 04:34:38 pm

Titolo: [Risolto] StringGrid - modificare i titoli delle colonne
Inserito da: petrusic - Febbraio 24, 2022, 04:34:38 pm
Si vede che non ho ancora capito come personalizzare i titoli della colonne di una stringGrid, a partire dalla fixedCol.

Nella mia stringGrid che ho chiamato GridMovvComune ho disegnato 9 colonne e x Righe(x dipende dal numero di righe occorrenti).
Le proprietà delle colonne sono state impostate, anche per i titoli, nella fase di disegno, però alcune di esse possono contenere un titolo diverso a seconda della procedura che andrà a riempirne le celle.
Visto che normalmente una cella può essere valorizzata con un'istruzione del tipo:
Codice: [Seleziona]
Form6.GridMovvComune.Cells[colonna, riga;]= 'nuovo valore';
pensavo che ciò valesse anche per i titoli delle varie colonne.

Invece NO.
Infatti pur avendo verificato il nuovo contenuto  di tutte le celle interessate
Codice: [Seleziona]
Form6.GridMovvComune.Cells[4,0]:= 'VOCE DI CASSA';  // [4, 0] -> [orizzontale(colonna), verticale(riga)] ;
    Form6.GridMovvComune.Cells[5,0]:= 'CODICE VOCE';
    Form6.GridMovvComune.Cells[6,0]:= 'VOCE DI CONTROPARTITA';
    Form6.GridMovvComune.Cells[7,0]:= 'CODICE VOCE';
    for i:= 0 to 7 do
    begin
      WriteLn('Form6.GridMovvComune.Cells[' + IntToStr(i) + ',0]= ' + Form6.GridMovvComune.Cells[i,0]);
    end;                                                               
la griglia si presenta come nell'immagine allegata.

Pur non avendo individuato una propietà Text, succede proprio come se la Form6.GridMovvComune.Cells[colonna, riga;]= 'nuovo valore'; agisse su una proprietà diversa dalla .caption.
Intanto non sono in grado di individuare il percorso tecnico per impostare il nuovo valore nella caption del titolo di una colonna.

Che ci sia un vincoio per le FixedCols e le FixedRows?
Titolo: Re:StringGrid - modificare i titoli delle colonne
Inserito da: DragoRosso - Febbraio 24, 2022, 04:58:56 pm
Ciao, io facendo così ottengo correttamente i titoli nella prima riga (intestazione):

Codice: [Seleziona]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Grids, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  for i:= 0 to 7 do
    begin
      StringGrid1.Cells[i, 0] := 'Prova '+i.ToString;
    end;
end;

end.

E ho il vincolo di una fixedcol e fixedrow.

Non è che qualche altra parte del codice và a cancellare o sovrascivere quelle celle ?.

Ciao
Titolo: Re:StringGrid - modificare i titoli delle colonne
Inserito da: petrusic - Febbraio 24, 2022, 06:05:22 pm
Ho provato il codice che mi hai suggerito, ma viene modificata solamente la 1a cella della 1a colonna (fixed).
Il resto rimane inalterato.

Citazione da: DragoRosso
Non è che qualche altra parte del codice và a cancellare o sovrascivere quelle celle ?.

No, comunque, per sicurezza, ho provando limitando la procedura alle sole istruzioni:
Codice: [Seleziona]
procedure FaiGridDescr();      // Ricerca per  Descrizione
. . .

begin
for i:= 0 to 8 do
   begin
     Form6.GridMovvComune.Cells[i, 0] := 'Prova ' + i.ToString;
   end;
  for i:= 0 to 8 do
  begin
    WriteLn('Form6.GridMovvComune.Cells[' + IntToStr(i) + ',0]= ' + Form6.GridMovvComune.Cells[i,0]);
  end;
end;                           
 
e non è cambiato niente.

Titolo: Re:StringGrid - modificare i titoli delle colonne
Inserito da: DragoRosso - Febbraio 24, 2022, 06:47:35 pm
Scusa, che versione di Lazarus usi e che FPC ? SO ?
Titolo: Re:StringGrid - modificare i titoli delle colonne
Inserito da: petrusic - Febbraio 24, 2022, 06:57:14 pm
Ma non c'entra la versione di Lazarus o altro.

Ho provato un altro programmino di prova sulle stringGrid, dove però non sono impostate le colonne con tutte le proprietà, ma sono indicate il n° di colonne e di righe, con una colonna ed una riga di testata.

Ho provato a modificare il contenuto delle celle della riga di testa ed ha funzionato.

Forse conviene che disegni ex-novo tutta la griglia. Probabilmente ho modificato, senza rendermene conto un parametro fondamentale per la modifica della cella in testa a  ciascuna colonna.

Titolo: Re:StringGrid - modificare i titoli delle colonne
Inserito da: DragoRosso - Febbraio 24, 2022, 07:04:33 pm
Bhò, può essere. Io non conosco alcuna proprietà che impedisca di scrivere in una cella di intestazione.

Facci sapere se risolvi, magari capendo cosa è successo.

Ciao
Titolo: Re:StringGrid - modificare i titoli delle colonne
Inserito da: petrusic - Febbraio 24, 2022, 10:37:44 pm
Ho risolto in parte così:
Codice: [Seleziona]
for i:= 0 to Form6.GridMovvComune.Columns.Count - 1 do
   begin
     Form6.GridMovvComune.Columns[i].Title.Caption := 'cella.1-Col.' + i.ToString;
   end;               
Dico "in parte" perchè vengono modificato soltanto le Caption delle cella di testa delle colonne non fixed. Infatti la prima cella della prima colonna che è di tipo fixed è modificabile sempre con lì'struzione
Codice: [Seleziona]
Form6.GridMovvComune.Cells[0,0]:= 'N.Pro';
Titolo: Re:StringGrid - modificare i titoli delle colonne
Inserito da: petrusic - Febbraio 25, 2022, 12:23:20 pm
Penso di avere risolto anche il problema del tipo di font da assegnare alla prima cella della prima colonna che è di tipo fixed, in modo da allinearla con quello delle altre celle di testata:
Ho impostato, per tutta la StringGrid, il tipo di Font , sia come famiglia, sia come grandezza, sia come stile. Ho provato ed, in questa maniera, anche la cella di testa della prima colonna presenta ora il font corretto.
Poi, avendo già personalizzato il font per tutte le colonne della griglia, una per una, sia nel titolo che nelle celle sottostanti, ho ottenuto quello che volevo.
Resta, come unica anomalia formale , il tipo di font per tutte le celle della prima colonna, sottostanti la cella di testa. Anche esse presentano lo stesso tipo di Font della cella di testa, ma essendo il loro contenuto un numero progressivo, non disturba.
Quindi ora posso dire di avere risolto quest'aspetto..
 :D