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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
1-18418
Chlavik
2003-09-25 14:48
2003.10.06
DrawFocuseRect. А Как нарисовать просто линию такого стиля?


11-18284
Kosta
2003-01-24 16:04
2003.10.06
KolWord Help


14-18630
Феликс
2003-09-17 15:15
2003.10.06
Как эта пестня называется?


1-18440
Kott
2003-09-25 01:31
2003.10.06
Помогите прлиз...


1-18295
Niobe
2003-09-24 10:27
2003.10.06
Уважаемые мастера, не подскажете как избавиться отVCL60.bpl & RTL