Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137

    [Delphi 5] gestione cella griglia

    Ciao,

    come faccio a mostrare i valori SI/NO in luogo di True/false all'interno di una colonna di un DBGrid (che è specificata nel column editor del dbgrid) e che contiene il campo booleano di una tabella paradox? cosicchè un utente, che debba scegliere fra true o false, scelga fra si/no.
    il tutto voglio che funzioni quando attivo la form che mostra questa tabella.

    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    oppure mi basterebbe anche poter visualizzare una casellina di spunta all'interno della colonna della griglia ma non so come fare....

    grazie.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Leggi questo articolo.

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

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    ok, però: quando clicco sulla cella mi si sposta la checkbox tutta a sinistra e di conseguenza se non volessi visualizzare un testo descrittivo, come nel tip, sta malissimo.
    come posso evitarlo senza dover per forza scriverci un testo descrittivo a fianco?

    Grazie.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Dando una sbirciata all'esempio, credo sia sufficiente evitare l'assegnazione della Caption al controllo DBCheckBox incorporato, oppure assegnarla ad una stringa vuota.

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

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    già provato e purtroppo non funzionava ....
    altre idee/consigli

    Grazie.

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da zephyr
    già provato e purtroppo non funzionava ....
    altre idee/consigli
    Verifica la parte di codice che si occupa dell'allineamento del controllo; magari, provvedi a modificare quella parte in modo che non sposti la casella oppure tenta di impostare una dimensione fissa per il controllo DBCheckBox incorporato inserendo nella proprietà Width il minimo valore che permette di vedere la casella di spunta senza però riservare lo spazio ad un'eventuale Caption.

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

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    mi dispiace ma è come una coperta corta: quando riesco a centrare la casella poi displayo male la cella selezionata ed in più la tecnica su cui si basa il tip fa in modo che quando l'utente va a amodificare il contenuto della cella la checkbox si rimpicciolisce in quanto utilizza quella del dbcheckbox che è di fatto più piccola di quella del rettangolo.
    quindi ci rinuncio.



    ma come posso fare a sapere il contenuto che l'utente digita direttamente nella cella di una griglia?
    almeno così gli forzo il valore SI/NO dall'attivazione.

    grazie.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da zephyr
    mi dispiace ma è come una coperta corta: quando riesco a centrare la casella poi displayo male la cella selezionata ed in più la tecnica su cui si basa il tip fa in modo che quando l'utente va a amodificare il contenuto della cella la checkbox si rimpicciolisce in quanto utilizza quella del dbcheckbox che è di fatto più piccola di quella del rettangolo.
    quindi ci rinuncio.
    Basta semplicemente cercare di comprendere il modo in cui il codice lavora e correggerlo per ottenere l'effetto desiderato; ad esempio, questa è il codice che ho prodotto io modificando l'esempio:
    codice:
    procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    const IsChecked : array [Boolean] of Integer =
     (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
    var
      DrawState: Integer;
      DrawRect: TRect;
    begin
      if (gdFocused in State) then
      begin
        if (Column.Field.FieldName = DBCheckBox1.DataField) then
        begin
          DrawRect:=Rect;
          InflateRect(DrawRect,-1,-1);
          DBGrid1.Canvas.FillRect(Rect);
          DBCheckBox1.Left := DBGrid1.Left + Rect.Left
           + ((Rect.Right - Rect.Left - 12) div 2);
          DBCheckBox1.Top := DBGrid1.Top + Rect.Top + 2;
          DBCheckBox1.Visible := True;
        end
      end
      else begin
        if (Column.Field.FieldName = DBCheckBox1.DataField) then
        begin
          DrawRect:=Rect;
          InflateRect(DrawRect,-1,-1);
          DrawState := IsChecked[Column.Field.AsBoolean];
          DBGrid1.Canvas.FillRect(Rect);
          DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect,
           DFC_BUTTON, DrawState);
        end;
      end;
    end;
    In sostanza, nella prima parte del codice si omette la definizione della Caption del controllo DBCheckBox lasciandola vuota e viene quindi effettuata la "centratura" del controllo nell'area della cella, riempiendo però questa per evitare la visualizzazione del testo contenuto nel campo.

    Originariamente inviato da zephyr
    ma come posso fare a sapere il contenuto che l'utente digita direttamente nella cella di una griglia?
    almeno così gli forzo il valore SI/NO dall'attivazione.
    Questa domanda non l'ho capita...

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

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

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    137
    grazie mille lo proverò.
    avevo già trasformato il campo boolean in uno char di 1 e me lo gestivo come S o N e basta.
    cmq avevo già provato la situazione che mi hai postato senza però a centrare bene il controllo ergo l'ho abbandonato perchè poi vedevo la checkbox più piccola del rettangolino che ne disegna lo stato quando non ci si trova sulla cella e non è che mi piacesse molto.

    per quanto riguarda l'altra domanda non ti preoccupare: fai finta di niente.

    Grazie.

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.