procedure TForm1.FormCreate(Sender: TObject); begin {Un contrôle TDbRichEdit est placé n'importe où sur la fiche. Il ne sera visible que quand on le lui demandera} DBRichEdit1.Visible := False; end ; procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var DrawRect: TRect; btnText: PAnsiChar; begin {Si le DbGrid détient le focus} if gdFocused in State then begin {Si le champ de la colonne est le même que celui relié au TDbRichEdit} if Column.Field = DbRichEdit1.Field then with DBGrid1 do begin {On positionne le TDbRichEdit avec le coin supérieur gauche aligné sur le rectangle à dessiner} DbRichEdit1.Left := Rect.Left + 2; DbRichedit1.Top := Rect.Top + 2; {Pour que le TDbRichEdit apparaisse au dessus du DBGrid, il faut affecter sa propriété parent à celle du Grid} DbRichEdit1.Parent := DbGrid1; {Maintenant, on peut afficher le contrôle de saisie} DbRichedit1.Visible := True; DbRichEdit1.SetFocus; end end else if Column.Field = DbRichEdit1.Field then begin {Quand la colonne n'a pas le focus, on dessine un bouton} DrawRect := Rect; InflateRect(DrawRect, -1, -1); DBGrid1.Canvas.FillRect(Rect); {Dessinbe un bouton} DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect, DFC_BUTTON, DFCS_BUTTONPUSH); {Mettre un libellé sur le bouton} btnText := StrNew('cliquer ici'); DrawText(DbGrid1.Canvas.Handle, btnText, StrLen(btnText), DrawRect, DT_CENTER or DT_VCENTER or DT_WORDBREAK); StrDispose(btnText); end; end; procedure TForm1.DBGrid1ColExit(Sender: TObject); begin {Masquer le contrôle TDbRichEdit quand on quitte la colonne} if DbGrid1.SelectedField.FieldName = DbRichEdit1.DataField then DbRichedit1.Visible := False; end ; procedure TForm1.DBRichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin {La touche ESC permet de rendre invisible le contrôle TDbRichEdit} if Key = VK_ESCAPE then DbRichEdit1.Visible := False; end ;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question