Конференция "Начинающим" » Моргание окна [D7, WinXP]
 
  • Rediska (02.12.16 16:23) [0]
    Добрый день.
    Имеется 2 приложения.
    1 - родитель
    2 - ребенок.
    Ребенок запускается без иконок, со стилем bsNone и wsMinimized.

    Родитель запускает ребенка через CreateProcess(без dwFlags и wShowWindow т.к. они задаются при создании приложения) передавая в параметрах свой Window Handle.
    Ребенок запускается и в качестве родителя указывает принятый хендл.


     Application.Initialize;
     Application.ShowMainForm := False;
     Application.CreateForm(TForm1, Form1);
     Windows.SetParent(Form1.Handle, hw); // hw - хендл родителя
     SetWindowPos(Form1.Handle, 0, posLeft, posTop, widthMon, heightMon, SWP_ASYNCWINDOWPOS);
     Application.Run;



    Вроде все хорошо приложение ребенок отображается в родителе.
    Но дело в том что ребенок перезапускается раз в 10с и происходит постоянное моргание на экране создаваемого ребенка и появляется иконка в панели задач на сотые секунды. Кто знает как можно поправить? Пробовал вот так в ребенке прописать. Единственное что помогло убрать фокус при создании с приложения, но моргание осталось.


    procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
     inherited CreateParams(Params);
     Params.ExStyle := (Params.ExStyle or WS_EX_NOACTIVATE) AND (WS_EX_TOOLWINDOW or WS_EX_APPWINDOW) xor WS_EX_APPWINDOW;
     Params.Style := (Params.Style or WS_CHILD) and (WS_POPUP) and (not WS_DLGFRAME);
     ShowWindow(Application.Handle, SW_HIDE);
    end;

  • An a Student (02.12.16 16:32) [1]
    А вы как хотели, создавая и уничтожая его каждые 10 секунд? Закрыли - оно и пропало. Не закрывайте.
    Что точно добиться-то надо? Не отображать на панели задач? Зачем "каждые 10с"? Версия Делфи?
    Задание стилей странное. And? Xor??
  • Rediska (02.12.16 16:53) [2]
    Там чекер) По этому надо было именно таким образом создавать и уничтожать. Ток не спрашивайте почему не поместил в потоки и т.д.) Там свои нюансы по этому поводу. Хочу чтобы оно не мешало пользователю. То есть создавалось в фоне и на панели задач небыло видно) Это моргание очень мешает. То есть я хочу чтобы был вид что работает только 1 программа.
  • Rouse_ © (02.12.16 17:44) [3]
    Такую простую логику на апи не але переписать? VCL то туда нафига тянуть?
  • Rediska (02.12.16 18:00) [4]
    Как бы уже весь софт готов) Остались тока эта мелочь. Из-за этого переписывать все смысла не вижу.
  • An a Student (02.12.16 18:06) [5]
    Чего такое чекер? Непонятно зачем создавать и уничтожать. Не надо так делать.
    Версия Делфи?
  • Rediska (02.12.16 18:49) [6]
    Версия Delphi 7. Чекер - проверяльщик чего либо. А создавать и уничтожать нужно потому что там используется libvlc которая иногда подвисает)  Даже если я не буду уничтожать все подряд, а только зависшие то сути вопроса я думаю это не меняет?) Ведь новые так же будут моргать...
  • An a Student (03.12.16 16:38) [7]
    гм... Проверяльщик... А тогда зачем проверяльщику окно вообще? Пусть просто проверяет.
    А если нужно окно выводить что-то - будет принадлежать другой программе, интерфейсной части так сказать, и оно будет одно и не трогается за всё время работы ПО.
  • Rediska (03.12.16 18:24) [8]
    Ппц конечно) Да какая разница зачем окно... Мне так надо! Была бы задача просто проверять без просмотра сделал бы на потоках. Лучше дельным советом помогите.
  • sniknik © (05.12.16 01:31) [9]
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     Left:= -1000;
    end;

 
Конференция "Начинающим" » Моргание окна [D7, WinXP]
Есть новые Нет новых   [119261   +45][b:0][p:0.001]