Показать сообщение отдельно
  #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
, 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; 

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