Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.029 c
2-1187585590
fERO
2007-08-20 08:53
2007.09.09
TIdHTTP отключение сообщений о ошибках


2-1187341833
Quart
2007-08-17 13:10
2007.09.09
SQL &amp; DBGrid


2-1187011043
Евгений Р.
2007-08-13 17:17
2007.09.09
Свойство RequiredLive


2-1187259357
DevilDevil
2007-08-16 14:15
2007.09.09
GetFileTime для выполняемого exe


2-1187338212
Poroshm
2007-08-17 12:10
2007.09.09
Работа с окнами