Текущий архив: 2007.09.09;
Скачать: CL | DM;
Вниз
хммм. Visible := true; <-- как на API ? Найти похожие ветки
← →
DevilDevil © (2007-08-14 16:42) [0]Проблема вообще вот в чём...
Используется несколько потоков, один из которых вызывает Синхронайз()...
В определённый момент приложение зависает.
Опытным путём было установлено, что программа зависает в моментКомпонент.Visible := true;
Ранее упомянутый поток тоже останавливается в момент синхронизации.
Предположение следующее...
Компонент каким то образом посылает себе какое то сообщение.
"Одновременно" в OnIdle обрабатывается неглавный поток, ...
В общем, внесите во весь этот бред смысл; почему SetVisible(true) может приводить к зависанию?
P.S. два этих потока (главный и неглавный) никак не связаны. особенно через этот компонент.
P.P.S. вот я и пробовал отослать компоненту сообщение для визуализации, избегая стандартного Visible подхода... но так и не понял, как это делается на WinApi. Ни ShowWindow, ни WM_SHOWWINDOW окно (компонент) не визуализировали.
← →
Eraser © (2007-08-14 16:50) [1]
> DevilDevil © (14.08.07 16:42)
для стандартных делфевских форм лучше дейтсвительно испольовать VCL средства, а не winAPI, иначе проблемы могут быть.
попробуй сразу после и непосредственно перед вызовом SetVisible вызывать Application.ProcessMessages, хотя лучше конечно код покажи.
← →
DevilDevil © (2007-08-14 17:10) [2]не помогает.
int PanelsCount = FList->Count;
for (int i = 0; i < PanelsCount;i++)
{
TActivePanel* P = (TActivePanel*)FList->Items[i];
if (P == Panel)
{
P->SetTitleColors(P->ColorActive1, P->ColorActive2); //ACTIVE1, ACTIVE2);
if (RestoreOnMinimize && P->Minimized) {P->Maximized = false; P->Minimized = false;}
Application->ProcessMessages();
if (!P->Visible) P->Visible = true;
//if (!P->Visible) SendMessage(P->Handle, WM_SHOWWINDOW, 1, 0);
//ShowWindow(P->Handle, SW_SHOWNORMAL);
P->BringToFront();
}
else
P->SetTitleColors(P->ColorInactive1, P->ColorInactive2);//INACTIVE1, INACTIVE2);
}
Всё виснет поVisible = true;
← →
MetalFan © (2007-08-14 17:33) [3]а иде тут паскаль???
← →
DevilDevil © (2007-08-14 17:52) [4]
for i := 0 to PanelsCount-1 do
begin
P = TActivePanel(FList[i]);
if P = Panel) then
begin
P.SetTitleColors(P.ColorActive1, P.ColorActive2);
if RestoreOnMinimize or P.Minimized then
begin
P.Maximized := false;
P.Minimized := false;
end;
Application.ProcessMessages;
P.Visible := true;
P.BringToFront;
end
else
P.SetTitleColors(P.ColorInactive1, P.ColorInactive2);
end;
P.S. вся работа здесь производится с моим компонентом; но виснет именно наP.Visible := true;
← →
Eraser © (2007-08-14 18:07) [5]
> P.S. вся работа здесь производится с моим компонентом;
а, ну так с этого и надо было начинать ) тут уж нужно смотреть реализацию свойства компонента. думаю ошибка в 17 строке.
← →
DevilDevil © (2007-08-14 18:10) [6]> думаю ошибка в 17 строке.
Врядли... комментарии вроде не компилируются...
А если серьёзно, в планеVisible
, он остался вся тем жеTCustomPanel
← →
Eraser © (2007-08-14 18:13) [7]
> DevilDevil © (14.08.07 18:10) [6]
дома гляну возможную причину, сейчас под рукой Делфи нет.
Страницы: 1 вся ветка
Текущий архив: 2007.09.09;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.034 c