Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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

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

PHP код:
procedure TDatePickerGrid.OnExitGrid(SenderTObject);
var 
FParentTWinControl;
begin
  inherited destroy
//Ушли из ячейки ничего не меняем
end;

procedure TDatePickerGrid.KeyPressEsc(SenderTObject; var KeyChar);
var 
vFParentTWinControl;
begin
  
if key #13 then begin //Вводим значение
    
vfparent := parent;
    (
vFParent as TStringGrid).Cells[(vFParent as TStringGrid).Col,(vFParent as TStringGrid).Row] := datetostr(DateTime);
    
inherited destroy;
  
end;
  if 
key #27 then inherited destroy; // Esc ничего
//здесь медод free может не работать есть подозрение что Key куда-то
//передается поэтому и вылетает ошибка => либо   inherited destroy
//  или так key = #0 затем free
//как лучше, незнаю?
end;

procedure TDatePickerGrid.RectSet// так будет правильно
var vFParentTWinControl;
    
integer;
begin
   vfparent 
:= parent;
   for 
:= 0 to (vFParent as TStringGrid).FixedCols-do
        
Left := Left + (vFParent as TStringGrid).ColWidths[i];
   for 
:= (vFParent as TStringGrid).LeftCol to (vFParent as TStringGrid).Col-do
        
Left := Left + (vFParent as TStringGrid).ColWidths[i]+1;

   
Left :=  Left + (vFParent as TStringGrid).Left;

   for 
:= 0 to (vFParent as TStringGrid).FixedRows-do
        
Top := Top + (vFParent as TStringGrid).RowHeights[i];
   for 
:= (vFParent as TStringGrid).TopRow to (vFParent as TStringGrid).Row-do
        
Top := Top + (vFParent as TStringGrid).RowHeights[i]+1;

   
Top := Top + (vFParent as TStringGrid).Top;

   
Width := (vFParent as TStringGrid).ColWidths[(vFParent as TStringGrid).Col]+3;
   
Height := (vFParent as TStringGrid).RowHeights[(vFParent as TStringGrid).row]+3;
end
Ответить с цитированием
  #3  
Старый 05.06.2006, 16:21
ilya ilya вне форума
Прохожий
 
Регистрация: 01.06.2006
Сообщения: 3
Репутация: 10
По умолчанию Узнал

Лучше key = #0 затем free, inherited destroy - память не освобождает
(или не до конца освобождает)!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter