Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-18537
ie
2003-09-17 11:51
2003.10.06
да уж тема


1-18404
S@b@k@.
2003-09-25 16:59
2003.10.06
Помогите с иконками в трее


3-18270
RDA
2003-09-15 12:11
2003.10.06
Срочно нужна помощь с SQL запросом


1-18375
Jiura32d
2003-09-22 21:04
2003.10.06
Как описать в записи TfontName?


1-18315
Support1
2003-09-23 20:44
2003.10.06
---|Ветка была без названия|---





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский