Nella Form in preparazione, ho definito una griglia e, nella griglia, ho dichiarato una FixedCol, dedicata a ricevere un numero progressivo di riga, per ciascuna cella della colonna.
Di default è applicato l'allineamento del testo taLeftJustify. Ciò mi determina una rappresentazione grafica del testo, tutto allineato a sinistra, mentre io vorrei ottenere un allineamento, tutto a destra. Il testo infatti è costituito da valori numerici.
Ho cercato una soluzione, leggendo qua e là, nel web, ma non ho trovato argomenti riguardanti il mio problema.
Ho trovato qualcosa legato al colore delle celle ed ho provato a trasferire il concetto nel mio gruppo di sitruzioni:
GRmovv.ColWidths[0]:= 50;
n:= GRmovv.RowCount - 1;
for i:= 1 to n do
begin
GRmovv.Cells[0,i]:= IntToStr(i); // [0, i] -> [orizzontale, verticale]
GRmovv.Cells[1,i]:= 'Descrizione relativa alla riga' + IntToStr(i) + ', nella griglia';
GRmovv.Cells[2,i]:= '1.01.600.005';
GRmovv.Cells[3,i]:= 'Voce contabile di Cassa corrispondente alla descrizione';
GRmovv.Cells[4,i]:= 'U';
GRmovv.Cells[5,i]:= '999.999,99';
GRmovv.Cells[6,i]:= '999.999,99';
end;
GrMovv.Canvas.Font.Style := [Regular]; // da ERRORE perchè non riconosce l'identificatore "Regular"
for i:= 1 to n do
begin
Col1Stile := GrMovv.Canvas.TextStyle;
Col1Stile.Alignment := taRightJustify;
GrMovv.Canvas.TextStyle := Col1Stile;
end;
Dopo avere ottenuto l'errore in compilazione, ho disattivato la riga che ha dato errore ed ho avviato il programma, però l'allineamento che volevo ottenere non è avvenuto.
Non capisco perchè, per dichiarare la larghezza della colonna ed il contenuto delle celle, tutto sommato, è stato abbastanza semplice, mentre non debba riuscire ad ottenere la stessa semplicità nella codifica dell'allineamento del testo dentro una o più celle della FixedeCol.
Allego, per il piacere della vista, anche la schermata con la Form attiva.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: integer; aRect: TRect; aState: TGridDrawState);
var
TS: TTextStyle;
begin
if (aCol = 0) then
begin
StringGrid1.Canvas.Rectangle(aRect);
Dec(ARect.Right, varCellPadding);
Dec(ARect.Right, 1);
TS := Canvas.TextStyle;
TS.Alignment := taRightJustify;
StringGrid1.Canvas.TextRect(aRect, ARect.Left, ARect.Top, StringGrid1.Cells[aCol, aRow], TS);
end
else
begin
StringGrid1.DefaultDrawCell(aCol, aRow, aRect, aState);
end;
end;
Prova a vedere se fa quello che intendevi tu.
Stilgar
PS
se volessi controllare il colore dello sfondo in funzione del valore di una colonna potresti aggiungere in testa al metodo:
if StringGrid1.Cells[4, aRow] = 'U' then // un controllo di esempio.
begin
StringGrid1.Canvas.Brush.Color := clSkyBlue;//un colore scelto a caso che non sia di quelli base
end
else
begin
StringGrid1.Canvas.Brush.Color := clMoneyGreen;//un colore scelto a caso che non sia di quelli base
end;