type
thack = class(tcontrol);
TForm1 = class(TForm)
DBGrid1: TDBGrid;
Button1: TButton;
DataSource1: TDataSource;
Table1: TTable;
procedureButton1Click(Sender: TObject);
procedureFormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
varForm1: TForm1;
implementation
{$R *.DFM}
procedureTForm1.Button1Click(Sender: TObject);
begin
THack(dbgrid1).controlstyle :=THack(dbgrid1).controlstyle + [csClickEvents];
THack(dbgrid1).OnClick := Form1.OnClick;
end;
procedureTForm1.FormClick(Sender: TObject);
begin
messagebeep(0);
application.processmessages;
end;
end.
Числа с плавающей точкой в DBGrid
Для показа в табличной сетке дробных чисел, выберите таблицу, с которой связана ваша сетка (через datasource, источник данных).
Активизируйте редактор полей (правой кнопкой мыши) и выберите поле, в котором вы хотите видеть дробное число.
Измените значение свойств 'DisplayFormat' и 'EditFormat', чтобы дробь имела формат такой, какой вы хотите (к примеру, шаблон '0.00', позволяющий сетке показывать поле с двумя цифрами после запятой).
Дважды щелкните на компоненте table, расположенном на форме. Нажмите на кнопку 'Add'. Будут показаны все поля вашей таблицы. Выберите их в списке «Available field» (доступные поля) и щелкните на кнопке OK. Теперь при щелчке на имени поля, в Инспекторе Объектов будут показаны все свойства, относящиеся к данному полю, здесь можно изменить текст заголовка, выводимый формат «DisplayFormat» (это как раз то, что вам нужно, измените его на ####0.0) и пр.
Получение данных DBGrid прежде, чем они будут отправлены: как мне узнать, что пользователь вводит в DBGrid?
Вы можете «видеть» что набирается в TDBGrid, «смотря» на контрол сетки TInPlaceEdit. Вы должны убедиться только в том, что к моменту использования TInPlaceEdit, контрол уже создан. Следующая функция покажет данные, редактируемые в колонках сетки:
procedureTForm1.DBGrid1KeyUp(Sender: TObject; varKey: Word; Shift: TShiftState);
varB: byte;
begin
forB := 0 toDBGrid1.ControlCount - 1 do
ifDBGrid1.Controls[B] isTInPlaceEdit then begin
withDBGrid1.Controls[B] asTInPlaceEdit do begin
Label1.Caption := 'Текст = ' + Text;
end;
end;
end;
Хочу шапку в TDBGrid. Как сделать?
Nomadicсоветует:
Уже реализовано в виде вот этого компонента — © Andre
unitbdbgrid;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, Math;
type
TOnDrawTitleEvent = procedure(ACol : integer; ARect : TRect; varTitleText : string) of object;
TBitDBGrid = class(TDBGrid)
private
FBitmapBrowse : TBitmap;
FBitmapEdit : TBitmap;
FBitmapInsert : TBitmap;
FBitmapFill : TBitmap;
FRealTitleFont : TFont;
FOnDrawTitle : TOnDrawTitleEvent;
FResizeFlag : boolean;
{ Private declarations }
procedureSetRealTitleFont(Value : TFont);
procedureUpdateTitlesHeight;
protected
procedureDrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
procedureMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedureMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
{ Protected declarations }
public
constructorCreate(AOwner : TComponent); override;
destructorDestroy; override;
{ Public declarations }
published
propertyOnDrawTitle : TOnDrawTitleEvent readFOnDrawTitle writeFOnDrawTitle;
propertyRealTitleFont : TFont readFRealTitleFont writeSetRealTitleFont;
{ Published declarations }
end;
procedure Register;
implementation
varDrawBitmap : TBitmap;
functionMax(X, Y: Integer): Integer;
begin
Result := Y;
ifX > Y thenResult := X;
end;
procedureWriteText(ACanvas: TCanvas; ARect: TRect; DX, DY: Integer; constText: string; Alignment: TAlignment);
// © Borland function :)
constAlignFlags : array[TAlignment] ofInteger =
( DT_LEFT orDT_WORDBREAK orDT_EXPANDTABS orDT_NOPREFIX,
DT_RIGHT orDT_WORDBREAK orDT_EXPANDTABS orDT_NOPREFIX,
Читать дальше