Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Это "неофициальный" путь. Существует несколько причин того, почему dbgrid не поддерживает этого события. Используйте этот код на свой страх и риск.
unitUdbgclk;
interface
usesWindows, Messages, SysUtils, Classes, Graphics,Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, DBTables, DB;
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
Delphi 1
Для показа в табличной сетке дробных чисел, выберите таблицу, с которой связана ваша сетка (через datasource, источник данных).
Активизируйте редактор полей (правой кнопкой мыши) и выберите поле, в котором вы хотите видеть дробное число.
Измените значение свойств 'DisplayFormat' и 'EditFormat', чтобы дробь имела формат такой, какой вы хотите (к примеру, шаблон '0.00', позволяющий сетке показывать поле с двумя цифрами после запятой).
Дважды щелкните на компоненте table, расположенном на форме. Нажмите на кнопку 'Add'. Будут показаны все поля вашей таблицы. Выберите их в списке «Available field» (доступные поля) и щелкните на кнопке OK. Теперь при щелчке на имени поля, в Инспекторе Объектов будут показаны все свойства, относящиеся к данному полю, здесь можно изменить текст заголовка, выводимый формат «DisplayFormat» (это как раз то, что вам нужно, измените его на ####0.0) и пр.
Получение данных DBGrid прежде, чем они будут отправлены: как мне узнать, что пользователь вводит в DBGrid?
Delphi 3
Вы можете «видеть» что набирается в 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,
DT_CENTER orDT_WORDBREAK orDT_EXPANDTABS orDT_NOPREFIX );
var
B, R: TRect;
I, Left: Integer;
begin
withDrawBitmap, ARect do{ Use offscreen bitmap to eliminate flicker and }
begin{ brush origin tics in painting / scrolling. }
Width := Max(Width, Right - Left);
Height := Max(Height, Bottom - Top);
R := Rect(DX, DY, Right - Left - 1, Bottom - Top - 1);
B := Rect(0, 0, Right - Left, Bottom - Top);
end;
withDrawBitmap.Canvas do begin
DrawBitmap.Canvas.CopyRect(B, ACanvas, ARect);
Font := ACanvas.Font;
Font.Color := ACanvas.Font.Color;
Brush := ACanvas.Brush;
SetBkMode(Handle, TRANSPARENT);
DrawText(Handle, PChar(Text), Length(Text), R, AlignFlags[Alignment]);
end;
ACanvas.CopyRect(ARect, DrawBitmap.Canvas, B);
end;
constructorTBitDBGrid.Create(AOwner : TComponent);
begin
inheritedCreate(Aowner);
FRealTitleFont := TFont.Create;
FResizeFlag := false;
end;
destructorTBitDBGrid.Destroy;
begin
FRealTitleFont.Free;
inheritedDestroy;
end;
procedureTBitDBGrid.UpdateTitlesHeight;
var
Loop : integer;
MaxTextHeight : integer;
RRect : TRect;
begin
MaxTextHeight := 0;
forloop := 0 toColumns.Count - 1 do begin
RRect := CellRect(0, 0);
RRect.Right := Columns[Loop].Width;
RRect.Left := 0;
Canvas.Font := RealTitleFont;
MaxTextHeight := Max(MaxTextHeight, DrawText(Canvas.Handle, PChar(Columns[Loop].Title.Caption), Length(Columns[Loop].Title.Caption), RRect, DT_CALCRECT + DT_WORDBREAK));
end;
ifTitleFont.Height <> - MaxTextHeight thenTitleFont.Height := - MaxTextHeight;
end;
procedureTBitDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ifMouseCoord(X, Y).Y = 0 thenFResizeFlag := true;
inheritedMouseDown(Button, Shift, X, Y);
end;
procedureTBitDBGrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Интервал:
Закладка: