Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.16;
Скачать: CL | DM;

Вниз

InplaceEditor   Найти похожие ветки 

 
alexnmsk   (2003-12-04 14:55) [0]

Как отловить момент закрытия InplaceEditor в StringGrid и переноса информации из редактора в ячейку таблицы.


 
Amoeba ©   (2003-12-04 15:28) [1]

Придется писать свой компонент.


 
Dimka Maslov ©   (2003-12-04 15:29) [2]

А в нём отлавливать сообщение WM_KILLFOCUS от InplaceEditora


 
Юрий Федоров ©   (2003-12-04 16:12) [3]

а OnSetEditText не подходит ?


 
Danilka ©   (2003-12-04 16:14) [4]

если не ошибаюсь, в момент закрытия едитора ничего в грид не переносится.


 
Amoeba ©   (2003-12-04 16:25) [5]

При закрытии InpalaceEditor он только делается невидимым. Реальная же запись в Cells производится в SetEditText.


 
alexnmsk   (2003-12-04 16:31) [6]

OnSetEditText - не подходит по причине его вызова при наборе каждого символа, а нужно проверять по окончании. Если в нем проверять свойство EditorMode=true, то если в режиме редактирования щелкнуть мышью по другой ячейке, EditorMode=false и обработчик не вызовется


 
Amoeba ©   (2003-12-04 16:33) [7]

Уже было сказано, что надо писать собственный компонент.


 
alexnmsk   (2003-12-04 16:34) [8]

Немного напутал.
Если EditorMode=false это значит ввод закончен и можно проверять значение, но если щелкнуть по другой ячейке, то OnSetEditText вызывается, а EditorMode=true соответственно проверки не будет, а хотелось бы.


 
Семен Сорокин ©   (2003-12-04 16:36) [9]

делал нечто подобное...
в OnCreate формы выставлял принудительно EditorMode = true, брал ActiveControl (наследник TCustomMemo если не ошибаюсь) сохранял его, и переопределял OnExit (для твоего случая).


 
alexnmsk   (2003-12-04 16:37) [10]

Подскажите с чего начать. Иммется компонент - потомок TStringGrid. Как в нем обработать сообщение WM_KILLFOCUS от InplaceEditora.


 
Danilka ©   (2003-12-04 16:42) [11]

в объявлении класса:
procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS;

в секции реализации:

procedure TCustomGrid.WMKillFocus(var Msg: TWMKillFocus);
begin
inherited;
if (FInplaceEdit <> nil) and (Msg.FocusedWnd <> FInplaceEdit.Handle) then
begin
// тут делаем, чего хотим

end;
end;

%))


 
Danilka ©   (2003-12-04 16:43) [12]

вобщем то выдрано из TCustomGrid
но подойдет для твоего наследника. :)


 
Семен Сорокин ©   (2003-12-04 16:45) [13]

можно без наследника см. [9]


 
Danilka ©   (2003-12-04 16:50) [14]

блин, накосячил я :((
на самом деле надо ловить не потерю фокуса, а наоборот.
в этом случае, в сообщении будет указан хендл окна, которое потеряло фокус, сравниваем его с едитором, если оно, то делаем что надо:

procedure WMSetFocus(var Msg: TWMSetFocus); message WM_SETFOCUS;

procedure TCustomGrid.WMSetFocus(var Msg: TWMSetFocus);
begin
inherited;
if (FInplaceEdit <> nil) and (Msg.FocusedWnd = FInplaceEdit.Handle) then
begin

// тут делаем, чего хотим

end;
end;


 
Danilka ©   (2003-12-04 16:52) [15]

"на самом деле надо ловить не потерю фокуса, а наоборот"
следует читать как:
"на самом деле надо ловить не потерю фокуса, а наоборот, его приобретение"

[13] Семен Сорокин © (04.12.03 16:45)
можно. но чел сказал - наследник уже есть, тогда проще в него кода добавить.


 
alexnmsk   (2003-12-05 09:01) [16]

Спасибо всем, кто откликнулся. Вариант [14] получился. В компоненте - потомке от TStringGrid сделал событие OnEditorExit.
Если кому нужно - привожу часть кода класса TMyStringGrid:
в секции описания
type TEditorExit = procedure (Sender: TObject; ACol, ARow: Longint) of object;
private
FEditorExit: TEditorExit;
published
property OnEditorExit: TEditorExit read FEditorExit write FEditorExit;

в секции реализации
procedure TMyStringGrid.WMSetFocus(var Msg: TWMSetFocus);
begin
inherited;
if (InplaceEditor <> nil) and (Msg.FocusedWnd = InplaceEditor.Handle) then
begin
if Assigned(FEditorExit) Then FEditorExit(Self,Col,Row);
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2003.12.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
14-52411
Knight
2003-11-17 00:55
2003.12.16
Кто где хостится?


1-52152
Rim
2003-12-03 11:59
2003.12.16
Табуляция в Memo


14-52371
copyr25
2003-11-15 17:19
2003.12.16
---|Ветка была без названия|---


14-52365
Кен
2003-11-23 03:49
2003.12.16
Мониторы из воздуха Подробности


3-52087
Bless
2003-11-21 15:33
2003.12.16
Почему может выскакивать Syntax error or access violation?