Вопрос в следующем имеет ли право на "жизнь" предложенный мною способ решения(см далее), следующей задачи.
Задача: Есть некий StringGrid по события Dblclick в выделенной ячейке появляется DateTimePicker(win32) далее выбираем дату выходим из DateTimePicker, ячейка получает выбранное число, по esc нечего не пишем.
Как я сделал:
PHP код:
unit Udategrid;
interface
uses
Windows, SysUtils, Classes, Controls, Forms,
StdCtrls, ComCtrls, Grids;
type
TDatePickerGrid = class(TDateTimePicker)
private
protected
procedure RectSet;
public
//не наслед, потому что другие параметры
constructor MyCreate(AOwner: TComponent; Aparent : TWinControl); virtual;
procedure OnExitGrid(Sender: TObject);
end;
implementation
{ TDatePickerGrid }
constructor TDatePickerGrid.MyCreate(AOwner: TComponent; Aparent : TWinControl);
begin
Create(AOwner);
parent := Aparent;
RectSet;//координаты
OnExit := OnExitGrid;//когда теряем фокус
OnKeyPress := onKeyPressEsc; //если жмем esc
SetFocus;
end;
procedure TDatePickerGrid.OnExitGrid(Sender: TObject);
var FParent: TWinControl;
begin
fparent := parent;
(FParent as TStringGrid).Cells[(FParent as TStringGrid).Col,(FParent as TStringGrid).Row] := datetostr(DateTime);
free;
end;
procedure TDatePickerGrid.RectSet;
var FParent: TWinControl;
i: integer;
begin
fparent := parent;
for i := 0 to (FParent as TStringGrid).Col-1 do
Left := Left + (FParent as TStringGrid).ColWidths[i];
Left := Left + 2;
Top := (FParent as TStringGrid).Top +
((FParent as TStringGrid).DefaultRowHeight + 1)*((FParent as TStringGrid).Row);
Width := (FParent as TStringGrid).ColWidths[(FParent as TStringGrid).Col]+2;
Height := (FParent as TStringGrid).DefaultRowHeight+2;
end;
Procedure TDatePickerGrid.KeyPressEsc(Sender: TObject; var Key: Char);
begin
if key = #27 then free;
end;
end.
Создаем проект на форму помещаем StringGrid и дописываем в
обр-к TForm1.StringGrid1DblClick(Sender: TObject)
PHP код:
procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
TDatePickerGrid.MyCreate(self, (Sender as TStringGrid));
end;
Ваше мнение для нас очень важно. Спасибо.