Форум: "Основная";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c