Показать сообщение отдельно
  #1  
Старый 01.06.2006, 12:12
ilya ilya вне форума
Прохожий
 
Регистрация: 01.06.2006
Сообщения: 3
Репутация: 10
Лампочка -этот способ хорошо или ... не очень

Вопрос в следующем имеет ли право на "жизнь" предложенный мною способ решения(см далее), следующей задачи.

Задача: Есть некий StringGrid по события Dblclick в выделенной ячейке появляется DateTimePicker(win32) далее выбираем дату выходим из DateTimePicker, ячейка получает выбранное число, по esc нечего не пишем.

Как я сделал:
PHP код:
unit Udategrid;

interface
uses
  Windows
SysUtilsClassesControlsForms,
  
StdCtrlsComCtrlsGrids;

type
TDatePickerGrid 
= class(TDateTimePicker)
  private
  protected
    
procedure RectSet;
  public
    
//не наслед, потому что другие параметры
    
constructor MyCreate(AOwnerTComponentAparent TWinControl); virtual;
    
procedure OnExitGrid(SenderTObject);
  
end;
implementation

TDatePickerGrid }

constructor TDatePickerGrid.MyCreate(AOwnerTComponentAparent :    TWinControl);
begin
  Create
(AOwner);
  
parent := Aparent;
  
RectSet;//координаты
  
OnExit := OnExitGrid;//когда теряем фокус
  
OnKeyPress := onKeyPressEsc//если жмем esc
  
SetFocus;
end;

procedure TDatePickerGrid.OnExitGrid(SenderTObject);
var 
FParentTWinControl;
begin
  fparent 
:= parent;
  
  (
FParent as TStringGrid).Cells[(FParent as TStringGrid).Col,(FParent as  TStringGrid).Row] := datetostr(DateTime);
  
free;
end;

procedure TDatePickerGrid.RectSet;
var 
FParentTWinControl;
    
iinteger;
begin
  fparent 
:= parent;
  for 
:= 0 to (FParent as TStringGrid).Col-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(SenderTObject; var KeyChar);
begin
  
if key #27 then free;
end;

end

Создаем проект на форму помещаем StringGrid и дописываем в
обр-к TForm1.StringGrid1DblClick(Sender: TObject)
PHP код:
procedure TForm1.StringGrid1DblClick(SenderTObject);
begin
   TDatePickerGrid
.MyCreate(self, (Sender as TStringGrid));
end

Ваше мнение для нас очень важно. Спасибо.
Ответить с цитированием