![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Задание StateImage для эл-тов TKOLTreeView при создании формы. [Delphi, KOL, MCK, WinXP]
Unknown Mystic © (2006-03-22 14:23:00)Мне нужно при создании формы заполнить TKOLTreeView некоторыми элементами, часть из которых должна быть отмечена галочкой. По идее все это просто:
Node := TreeView.TVInsert( 0, 0, 'Item1' );
TreeView.TVItemStateImg[Node] := 2;
только из CreateForm это работает на половину - элементы создаются, а галки - не ставятся :(
Если же "повесить" тот же код, скажем, на нажатие кнопки, то все работает нормально.
Подскажите пожалуйста, как это побороть?
Unknown Mystic (2006-08-18 13:44:00) [1]Пол года вот пользовался таймером, а сейчас предпринял еще одну попытку...
Решил добавить PostMessage, как можно позже. Самое позднее, что я нашел - функция Run в kol.pas. Получилось вот что:
procedure Run( var AppletWnd: PControl );
begin
AppletRunning := True;
Applet := AppletWnd;
AppletWnd.CreateWindow; //virtual!!!
PostMessage(Applet.Handle, 99999, 0, 0); // This string was added.
while not AppletTerminated do
begin
WaitMessage;
AppletWnd.ProcessMessages;
{$IFDEF USE_OnIdle}
ProcessIdle( AppletWnd );
{$ENDIF}
end;
if AppletWnd <> nil then
TerminateExecution( AppletWnd );
end;
(В обработчике OnMessage тоже, что и несколькими сообщениями выше.)
Но все равно отметки не проставляются :(
Если же перед выставлением отметок вывести какое-то сообщение (например, MsgOK('...');), то пока будет нажата кнопка ок, этой задержки хватит, что бы отметки были проставлены как нужно...
В связи с этим вопрос:
Что еще может выполняться параллельно с обработкой моего сообщения?
Unknown Mystic (2006-03-25 02:37:00) [2]Код создающий элемент и ставящий галку работает и с кнопки и с таймера, даже если его выполнять при самом первом срабатывании таймера и от интервала не зависит (галочки выставляются при любом) (Таймер MCK'шный и Enabled = True выставлял в инспекторе объектов)
Ну а сообщения тоже отправляются, т.к. эл-ты в дереве все-таки создаются, только не отмечаются...
Последовательность из 2, 3, 5 сообщений не помогла...
С таймером, как я писал выше все нормально... Только вот не хочется его в проект пихать... Там у меня таймеры не используются...
Vladimir Kladov (2006-03-24 18:28:00) [3]если код срабатывает(проверяли?), тогда не знаю. Еще раз пошлите, через 2 сообщения. Видимо, сообщение приходит все еще слишком рано. Я иногда такие штуки даже на таймер сажал, запуская в OnShow. Сначала надо добиться, чтобы заработало вообще, а потом уже можно варьировать.
Unknown Mystic (2006-03-24 01:11:00) [4]Исправил на PostMessage... Результат тот же - галок нет...
Vladimir Kladov (2006-03-23 15:20:00) [5]SendMessage выполняется немедленно - смысл-то какой? PostMessage надо.
Unknown Mystic (2006-03-22 22:11:00) [6]
> попробуйте в OnShow
Не получается...
> тогда в OnShow послать себе сообщение и в OnMessage уже
> тогда по этому сообщению
Это как? Примерно так?
В OnShow:
SendMessage(Applet.GetWindowHandle, 99999, 0, 0);
А в OnMessage:
if Msg.message = 99999 then
begin
Node := TreeView.TVInsert( 0, 0, 'Item1' );
TreeView.TVItemStateImg[Node] := 2;
end;
Result := FALSE;
Сообщение форма получает, но галки все равно нет... :(
Тоже самое, если сообщение слать не форме, а TreeView'у...
Vladimir Kladov (2006-03-22 16:49:00) [7]попробуйте в OnShow, а не получится, тогда в OnShow послать себе сообщение и в OnMessage уже тогда по этому сообщению. Иногда окна отказываются что-нибудь делать сами, пока их на экране не "видно".