Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [DELPHI] DBGrid, articolo

    Non riesco a capire una parte di un aricolo (http://delphi.about.com/od/usedbvcl/l/aa050404a.htm)

    First, in the OnCreate event for the Form object containing the DBGrid, specify what columns need to be auto-resized by assigning a non-zero value for the Tag property of the corresponding TField object.

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    //setup autoresizable columns by asigning
    //Minimm Width in the Tag property.

    //using fixed value: 40 px
    Table1.FieldByName('FirstName').Tag := 40;

    //using variable value: width of the
    //default Column title text
    Table1.FieldByName('LastName').Tag :=
    4 + Canvas.TextWidth(
    Table1.FieldByName('LastName').DisplayName);
    end;

    In the above code, Table1 is a TTable component linked to a DataSource component which is linked with the DBGrid. The Table1.Table property points to the DBDemos Employee table.
    We have marked the columns displaying the values for FirstName and LastName fields to be auto-resizable.
    Non è l'inglese che mi blocca ma che sono all'inizio con Delphi

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Semplicemente, viene sfruttata la proprietà Tag degli oggetti che rappresentano i campi di una tabella lato Delphi per contenere un'informazione, in questo caso la larghezza minima della colonna.

    Magari, prova a specificare qual è la tua esigenza per vedere se ci sono soluzioni differenti da poter vagliare, oppure se sono state introdotte successivamente funzionalità automatiche in grado di svolgere il compito senza richiedere degli escamotage da parte dello sviluppatore.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    io ho creato una connessione ad un database Access...e visualizzo i dati in una DbGrid, solo che questa visualizza le colonne sono sempre della grandezza della larghezza della DbGrid. E non riesco mettere una larghezza fissa per il Dbgrid. Cercando nel forum ho trovato quell'articolo, ma si fa riferimento solo alle Table...come posso fare?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Tramite la proprietà Columns del controllo TDBGrid, puoi impostare la larghezza delle colonne a tuo piacimento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Ho creato questo codice che funziona (se ce qualcosa da migliorare ditemelo pure, è la prima volta che programmo). NAturalmente questo fa si che tutto le colonne siano di larghezza "Lc".
    Una domanda: è possibile modificare la larghezza in base alla larghezza del titolo della colonna? ... oddio spero di essermi spiegato...in caso provo in altra maniera :P
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
    DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var Lc,Nc : Integer;
    begin

    for Nc := 0 to Dbgrid1.Columns.Count - 1 do
    begin
    Lc := 60;
    dbgrid1.Columns[Nc].Width := Lc;
    end;
    end;

  6. #6
    Ciao Yoyo87,
    come ti ha riferito alka, l'articolo da te indicato ridimensiona la larghezza delle colonne di un DBGrid in base al tag, la tecnica utilizzata nell'articolo puo' essere utilizzata non solo per le tabelle ma, per esempio, anche per le query.
    I passi da seguire sono i seguenti:
    1. ti definisci la procedura FixDBGridColumnsWidth;
    2. su FormResize della tua form richiami FixDBGridColumnsWidth;
    3. infine, clicchi su onCreate della form ed inserisci il codice:
    codice:
    procedure TNomeForm.FormCreate(Sender: TObject);
    begin
       //la riga seguente utilizza un valore fisso (40 px), quindi la commento
      //nomeComponenteDataBase.FieldByName('NomeCampo').Tag := 40;
    
      //il codice seguente ridimensiona solo la colonna NomeCampo, inoltre dovrai
      //sostituire dataBase (nome tabella o query) e NomeCampo con i dati corretti
      dataBase.FieldByName('NomeCampo').Tag :=
        4 + Canvas.TextWidth(dataBase.FieldByName('NomeCampo').DisplayName);
    
      //se desideri inserire più colonne, duplica il codice precedente, esempio: 
      dataBase.FieldByName('NomeCampo1').Tag :=
        4 + Canvas.TextWidth(dataBase.FieldByName('NomeCampo1').DisplayName);
    end;

    RS95

  7. #7
    Prima non avevo capito il motivo per il quale il codice non funzionava, almeno ho scoperto che posizionavo tutto bene.
    Cmq a questa parte:
    dataBase.FieldByName('NomeCampo1').Tag :=
    4 + Canvas.TextWidth(dataBase.FieldByName('NomeCampo1' ).DisplayName);

    se provo a mettere al posto di dataBase i nome della dbgrid mi dice che la TBgrid non contiene un membro chiamato FieldByName

    p.s.: io ho creato una connessione ADO (quindi un ADODataSet, DataSetProvider, DataSource e un ClientDataSet), usando una DBGrid per visualizzare i dati

  8. #8
    Ciao yoyo,
    al posto di dataBase devi inserire il nome del componente al quale colleghi la DBGrid per far visualizzare i dati contenuti nella tabella del tuo db.

    RS95

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.