-
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]Ппц конечно) Да какая разница зачем окно... Мне так надо! Была бы задача просто проверять без просмотра сделал бы на потоках. Лучше дельным советом помогите.
-
procedure TForm1.FormCreate(Sender: TObject);
begin
Left:= -1000;
end;