DImensionamento TStringGrid

di il
10 risposte

DImensionamento TStringGrid

Buongiorno a tutti, ho il seguente problema. Utilizzo una TStringGrid in cui inserisco dei dati e fin qui tutto bene. Il problema è che se apro il form, che contiene la Grid, in PC dversi con risoluzioni diverse la TStringGrid non appare mai uguale (allego immagini di esempio). E' possibile fare in modo che appaia sempre uguale?
Grazie per eventuali suggerimenti.
Allegati:
Come non dovrebbe essere
Come non dovrebbe essere

Come dovrebbe essere
Come dovrebbe essere

10 Risposte

  • Re: DImensionamento TStringGrid

    Pcfactory ha scritto:


    Il problema è che se apro il form, che contiene la Grid, in PC dversi con risoluzioni diverse la TStringGrid non appare mai uguale
    Se le risoluzioni sono diverse, mi verrebbe da dire che è normale. Ad ogni modo, puoi sempre riassegnare le dimensioni delle colonne a runtime, scrivendo il codice opportuno e impostando la larghezza fissa che preferisci per ciascun colonna.
  • Re: DImensionamento TStringGrid

    Ciao, io assegno già la larghezza delle colonne appena aproil form:
      GrigliaCalcoli.ColWidths[0] := 60;
      GrigliaCalcoli.ColWidths[1] := 75;
      GrigliaCalcoli.ColWidths[2] := 100;
      GrigliaCalcoli.ColWidths[3] := 100;
      GrigliaCalcoli.ColWidths[4] := 100;
      GrigliaCalcoli.ColWidths[5] := 340;
      GrigliaCalcoli.ColWidths[6] := 90;
      GrigliaCalcoli.ColWidths[7] := 120;
      GrigliaCalcoli.ColWidths[8] := 150
    ma il problema c'è lo stesso.
  • Re: DImensionamento TStringGrid

    C'è qualcosa di strano nella dimensione delle finestre nei due screenshot.

    Fossi in te, proverei a "isolare" il codice della griglia e la sua definizione all'interno di un progetto che sia scaricabile autonomamente, da usare per riprodurre il problema e verificare quindi l'applicabilità di svariate soluzioni.

    Ciao!
  • Re: DImensionamento TStringGrid

    Prendi la misura della larghezza del form (numero fisso).
    sul metodo on resize del form metti il codice (lo descrivo soltanto).
    leggi l'incremento del form (prima era 100 ora e' 110) quindi 110 - 100 = 10 cioe' incremento=numero fisso - larghezza form
    ne consegue che:
    GrigliaCalcoli.ColWidths[0] := 60 + int(incremento / numerocolonne);
    GrigliaCalcoli.ColWidths[1] := 75 + int(incremento / numerocolonne);
    GrigliaCalcoli.ColWidths[2] := 100 + int(incremento / numerocolonne);
    GrigliaCalcoli.ColWidths[3] := 100 + int(incremento / numerocolonne);
    GrigliaCalcoli.ColWidths[4] := 100 + int(incremento / numerocolonne);
    GrigliaCalcoli.ColWidths[5] := 340 + int(incremento / numerocolonne);
    GrigliaCalcoli.ColWidths[6] := 90 + int(incremento / numerocolonne);
    GrigliaCalcoli.ColWidths[7] := 120 + int(incremento / numerocolonne);
    GrigliaCalcoli.ColWidths[8] := 150 + int(incremento / numerocolonne);

    puoi anche scrivere
    for x:=0 to int(incremento / numerocolonne) do GrigliaCalcoli.ColWidths[x]:=GrigliaCalcoli.ColWidths[x]+Incremento
    addiziona o sottrae in base al form...
    ovviamente le misure di partenza sono quelle in design time... poi tutto si aggiusta da se. e non ti preoccupi dei monitor dove gira il programma. io disegno i form dal 10" (puoi vederli girare su netbook) poi in run time tutto si proporziona.

    comunque io uso un metodo senza calcoli, ma e' coperto da segreto aziendale...

    un saluto a Marco che seguo pure su fb...
  • Re: DImensionamento TStringGrid

    Fare un calcolo con le proporzioni.
    1135 è la dimensione delle colonne imposta da programma, faccio un rapporto con la larhezza effettiva della griglia ( che ho chiamato per compattezza GC ).
    [CODE] procedure TForm1.Button1Click(Sender: TObject); Function Calcola(valore:Integer):Integer; Var lar, temp : Integer; Begin // Se la String Grid e' maggiore usa la dimensione effettiva lar := GC.Width; // Larhezza ottenuta sommando i valori sotto (60, 75, 100, 100, .....) temp := 1135; calcola := valore * lar div 1135; End; begin GC.Cells[0,0] := 'Quantità'; GC.Cells[1,0] := 'Altezza (H)'; GC.Cells[2,0] := 'Lunghezza (L)'; GC.Cells[3,0] := 'Sporgenza (H)'; GC.Cells[4,0] := 'Coibentazione'; GC.Cells[5,0] := 'Verniciatura'; GC.Cells[6,0] := 'Costo €'; GC.Cells[7,0] := 'Costo € Scontato'; GC.Cells[8,0] := 'Costo € Ricarico'; GC.ColWidths[0] := Calcola(60); GC.ColWidths[1] := Calcola(75); GC.ColWidths[2] := Calcola(100); GC.ColWidths[3] := Calcola(100); GC.ColWidths[4] := Calcola(100); GC.ColWidths[5] := Calcola(340); GC.ColWidths[6] := Calcola(90); GC.ColWidths[7] := Calcola(120); GC.ColWidths[8] := Calcola(150); end;
  • Re: DImensionamento TStringGrid

    Dobby
    cells[x,y]??
    forse non ho capito se intende una stringgrid o una dbgrid...
    io faccio un calcolo delle proporzioni.
    per la fretta non ho messo il valore minimo e il divisore delle colonne...
    aggiungo rettifiche...
    domanda: se allargo il form di 5 punti o suoi multipli e ho 9 colonne, come imponi i decimali ad una proprietà integer?
  • Re: DImensionamento TStringGrid

    sihsandrea ha scritto:


    Dobby
    cells[x,y]??
    forse non ho capito se intende una stringgrid o una dbgrid...
    io faccio un calcolo delle proporzioni.
    per la fretta non ho messo il valore minimo e il divisore delle colonne...
    aggiungo rettifiche...
    domanda: se allargo il form di 5 punti o suoi multipli e ho 9 colonne, come imponi i decimali ad una proprietà integer?
    Puoi usare Round
  • Re: DImensionamento TStringGrid

    atticus ha scritto:


    Puoi usare Round
    Occhio al fatto che la funzione Round(), come vale in realtà per tutti i linguaggi, usa l'algoritmo del banchiere...
    Qui un approfondimento.

    Ciao!
  • Re: DImensionamento TStringGrid

    Come tutti gli arrotondamenti
  • Re: DImensionamento TStringGrid

    atticus ha scritto:


    sihsandrea ha scritto:


    Dobby
    cells[x,y]??
    forse non ho capito se intende una stringgrid o una dbgrid...
    io faccio un calcolo delle proporzioni.
    per la fretta non ho messo il valore minimo e il divisore delle colonne...
    aggiungo rettifiche...
    domanda: se allargo il form di 5 punti o suoi multipli e ho 9 colonne, come imponi i decimali ad una proprietà integer?
    Puoi usare Round
    Forse mi sono espresso male. Le proprietà larghezza e altezza degli oggetti accettano solo interi. Un oggetto puo' essere largo 100 o 101 non 100,5. Se hai 9 oggetti e l'incremento del form e' 5 punti puoi distribuire 1 punto solo a 5 elementi. Puoi usare int() trunc() o qualsiasi altra funzione, ma devi considerare la base di elementi da implementare. Se uri Round e l'incremento risulta 0.6 aumentano tutti di 1 punto quindi su 9 elementi hai l'ultimo elemento spostato di 4 punti oltre che maggiorato di 1 punto. Tuttavia non ho capito se usa una stringgrid o una dbgrid.
    suggerimento: ancoraggio.
Devi accedere o registrarti per scrivere nel forum
10 risposte