Форум: "Основная";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];
ВнизOnChange:=Change; Найти похожие ветки
← →
mOOx_ (2003-09-19 12:31) [0]Добрый день. Объясняю проблему: создаю, значит, компонент на основе TStringGrid, в котором в ячейке создается TComboBox. Смысл вообщем-то ясен, но вот в чем загвоздка: когда я при создании этого самого ComboBox"а пишу сабж, то при выборе какого-либо пункта в этом боксе процедура Change не происходит.
Вырезки из кода:
CBox = record
Col,Row: integer;
Box: TComboBox;
Name: string;
end;
CBoxs = array of CBox;
TEjectStringGrid = class(TStringGrid)
protected
Boxs: CBoxs;
...
public
procedure Change(Sender: TObject);
...
Создание экземпляра Бокса:
function TEjectStringGrid.AddBox(Row,Col: integer; BoxName: string) : TComboBox;
var
l: integer;
begin
l:=Length(Boxs);
SetLength(Boxs,l+1);
Boxs[l].Col:=Col;
Boxs[l].Row:=Row;
Boxs[l].Name:=BoxName;
Boxs[l].Box:=TComboBox.Create(Self);
Boxs[l].Box.ParentWindow:=Handle;
Boxs[l].Box.Visible:=false;
Boxs[l].Box.OnChange:=Change;
Result:=Boxs[l].Box;
end;
Вроде бы при выборе пункта все должно вызываться. Ан нет, хрен там. Что не так. Плз, хелп. Иначе скорую вызывать придется :(
← →
MBo (2003-09-19 12:40) [1]переопредели обработчик WMCommand, чтобы не только от InplaceEdit.Handle обрабатывать соообщения.
← →
mOOx_ (2003-09-19 12:57) [2]Конечно всегда приятно получать советы от мастелов, но вот я же не мастер и мне не понятно, где переопределять WMCommand и что за объект такой InplaceExit?
← →
MBo (2003-09-19 13:13) [3]нуу.. в grids.pas не заглядывал?
← →
Плохиш_ (2003-09-19 13:19) [4]2MBo © (19.09.03 13:13) [3]
Ну ты спросил 8-)
PS. Может лучше скорую вызвать?
← →
mOOx_ (2003-09-19 13:19) [5]Заглянул, вопрос: как связаны TInplaceEdit и TStringGrid?
← →
KSergey (2003-09-19 13:22) [6][5] mOOx_ © (19.09.03 13:19)
Заглянул, вопрос: как связаны TInplaceEdit и TStringGrid?
Позвольте, встряну: при редактировании ячейки грида на это место вставляется этот самый TInplaceEdit. По окончании редактирования он скрывается, а значени переносится в ячейку и уже там отображается.
← →
pasha_golub (2003-09-19 13:25) [7]Чтобы не иметь гемороя советую поменять этот самый инпас-эдитор на свой комбобокс
← →
mOOx_ (2003-09-19 13:26) [8]Понял, большое спасибо, буду думать дальше :). Но, если не сложно, не могли бы вы написать, как переопределить это самое дело. Просто сам я еще не скоро разберусь, а хотелось бы побыстрее.
← →
mOOx_ (2003-09-19 13:29) [9]Я что-то не нашел, в какой процедуре инплайс создается. Это понятно, что заменить легче :), только вот надо найти сначала, где.
← →
MBo (2003-09-19 13:37) [10]обработчик WM_Command диспетчеризует нотификационные сообщения от деток контрола. Для грида учитываются только сообщения от InplaceEdit-а, остальное игнорируется:
procedure TCustomGrid.WMCommand(var Message: TWMCommand);
begin
with Message do
begin
if (FInplaceEdit <> nil) and (Ctl = FInplaceEdit.Handle) then
case NotifyCode of
EN_CHANGE: UpdateText;
end;
end;
end;
так вот в перекрытом обработчике нужно, если Ctl=FInplaceEdit, то вызвать inherited, иначе переслать детке (Ctl) CN_COMMAND c параметрами из Message
← →
mOOx_ (2003-09-19 13:54) [11]procedure TEjectStringGrid.WMCommand(var Message: TWMCommand);
begin
with Message do
begin
if (Ctl = FInplaceEdit.Handle) then
inherited WMCommand(Message)
else
begin
case NotifyCode of
CN_COMMAND: ???;
end;
end;
end;
end;
Что-то вроде этого или нет? Вот только что на месте ??? ставить? Я с сообщениями раньше не работал, так что прошу прощения за навязчивость.
← →
MBo (2003-09-19 13:58) [12]sendMessage
← →
mOOx_ (2003-09-19 14:33) [13]Объявление процедуры:
TEjectStringGrid = class(TStringGrid)
private
procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;override;
Что-то компиллер ругается на override. Где мне переопределять WMCommand?
← →
mOOx_ (2003-09-19 14:35) [14][Error] ejectSG_3M.pas(19): Field definition not allowed after methods or properties
Вот так вот гнусно он ругается :)
← →
Master (2003-09-19 14:50) [15]Тебе лучше неписать своих компонент.
← →
mOOx_ (2003-09-19 14:53) [16]Тебе лучше не называть Master"ом :)
← →
VMcL (2003-09-19 15:23) [17]>mOOx_ © (19.09.03 14:35) [14]
override не нужно
← →
VMcL (2003-09-19 15:27) [18]>mOOx_ © (19.09.03 14:35) [14]
и, во-вторых, в protected
← →
mOOx_ (2003-09-24 19:14) [19]Вопрос:
"...TWMCommand); message WM_COMMAND;" - вот message WM_COMMAND указывает на то, что при приходе сообщения WM_COMMAND должна выполниться процедура, для которой эта конструкция указана или как-то не так? Задаю вопрос, поскольку в делфе щас столько всяких добавлений к синтаксису, что за всеми и не уследишь.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c