![]() |
Form nicht mehr bedienbar
Hallo,
ich nutze eine Form in Größe einer Appbar am oberen Bildschirmrand. (formstyle :=fsStayOnTop) Von meiner Hauptform setze ich über einen Button diese Form auf show Mit der AppBar starte ich zudem noch das Navigationsproramm "Navigon Navigator Notebook" welches direkt maximiert dargestellt wird. Jetzt mein Problem: Ich sehe meine AppBar weiterhin über dem Navigon, kann diese aber nicht bedienen. Nur das Navigon ist bedienbar. wenn ich trotzdem auf der Appbar einen Button drücke, welcher aber nicht wirklich runtergeht und danach das Navigon beende, dann wird der Buttonbefehl ausgeführt. Was kann ich tun ? PS: wenn ich Notepad vom Windows da einbinde, dann klappt es. Navigon arbeitet nur min/maximiert. |
Re: Form nicht mehr bedienbar
keiner eine Idee ?
Hier mal der Code: Zum starten vom Hauptmenü über einen Button (als Image mit OnmouseDown,Up,Click) zeige ich meine Form (navigation_frm) als kleine Leiste am oberen Bildschirmrand und startete gleichzeitig das ext Prog. Hier kam es schon dazu, das meine form gar nicht zu Ende gezeichnet wurde, als das ext Prog startete. Deshalb einen Delay-Timer von 3 sek.
Delphi-Quellcode:
procedure TMain_frm.Image5Click(Sender: TObject);
begin extApps_frm.timer1.Interval:=3000; extApps_frm.timer1.Enabled:=true; Main_frm.Hide; mediaplayer_frm.Hide; navigation_frm.FormStyle := fsStayOnTop; navigation_frm.Show; //SetForegroundWindow(navigation_frm.Handle); end;
Delphi-Quellcode:
Diese procedure ist übernommen, da ich in API noch gar keine Kentnisse habe, auch überall in meinem Code mal Testversuche.
procedure TextApps_frm.Timer1Timer(Sender: TObject);
var app: String; appWithPfad : String; begin begin app := ExtractFileName(config_frm.navigation_root_edit_Fld.Text); appWithPfad := config_frm.navigation_root_edit_Fld.Text; Wnd := FindWindow(PChar(app), nil); if IsEXERunning(app, False) then begin timer1.Enabled:=false; SetWindowPos(Wnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE); //ShowMessage('Läuft schon...) end else begin timer1.Enabled:=false; extApps_frm.RunApp(appWithPfad,0,40,800,530); //ShowMessage('Läuft nicht...); end; end; end;
Delphi-Quellcode:
Wie gesagt, mit Notepad funktioniert es wunderbar, nur mit dem Navigator Notebook nicht, wenn es startet, dann öffnet sich dabei erst ein kleines Fenster mit Infos, danach erst das maximierte Programmfenster selbst. Irgendwie bekomme ich auch das Handle von diesem Prog nicht in den Griff. Abgesehen davon ist mein Hauptproblem, das ich meine Form (Leiste) oben sehe, und ich auch den Focus vom Navigon wegbekomme, aber irgendwie meine Buttons nicht betätigen kann solange das ext.Prog läuft.Ich denke das nicht zu ende zeichnen der Leiste,wenn ich den Timer weglasse, muss auch damit zusammenhängen.
procedure TextApps_frm.RunApp(const FileName: String; Left, Top, Width, Height: Integer);
function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; begin TList(lParam).Add(Pointer(hWnd)); Result := True; end; function GetWndHandle(ProcessId: DWORD): HWND; var List: TList; I: Integer; PID: DWORD; begin Result := 0; List := TList.Create; try EnumWindows(@EnumWindowsProc, LPARAM(List)); for I := 0 to List.Count - 1 do if GetWindowThreadProcessId(HWND(List.Items[I]), @PID) <> 0 then if PID = ProcessId then begin Result := HWND(List.Items[I]); Break; end; finally List.Free; end; end; var SI: TStartupInfo; PI: TProcessInformation; begin FillChar(SI, SizeOf(TStartupInfo), 0); SI.cb := SizeOf(TStartupInfo); if CreateProcess(nil, PChar(FileName), nil, nil, False, 0, nil, nil, SI, PI) then begin WaitForInputIdle(PI.hProcess, INFINITE); AppHWnd := GetWndHandle(PI.dwProcessId); if IsWindow(AppHWnd) then if IsWindowVisible(AppHWnd) then begin Application.ProcessMessages; //ShowWindow(AppHWnd,SW_SHOWMINNOACTIVE); MoveWindow(AppHWnd, Left, Top, Width, Height, True); //windows.SetParent(AppHWnd,main_frm.Handle); //SetWindowPos(AppHWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE); SetWindowPos(AppHWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE); //SendMessage(AppHWnd, WM_SYSCOMMAND, SC_Minimize, 0); CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end; end; end; :?: |
Re: Form nicht mehr bedienbar
Warum verwendest du nicht
![]()
Delphi-Quellcode:
und das im FormCreate, ggf. "handle" durch "0" ersetzen.
shellexecute(handle, 'open', 'c:\...\wasauchimmer.exe', '', '', sw_maximize);
:gruebel: |
Re: Form nicht mehr bedienbar
Zitat:
|
Re: Form nicht mehr bedienbar
Dann programmier eine richtige
![]() |
Re: Form nicht mehr bedienbar
Zitat:
![]() |
Re: Form nicht mehr bedienbar
Hmm habe wohl gerade festgestellt , das mit shellexecute gestartet, das ext. prog zwar erstmal meine Form überdeckt, ich aber über die Windoof-Taste die Taskleiste aufrufen kann und meine Form so wiedrum funktional über das ext kommt. Nur es bleibt nicht StayOnTop ,wenn ich wieder auf das ext. Prog klicke.
Aber nun muss es doch eine Lösung geben, wenn ich schon meine Form wieder greifen kann???? @Luckie : die richtige AppBar nimmt sich den Platz,den es braucht und die ext.Prog können unweigerlich nur darunter arbeiten wie ne Taskleiste oder? muss mal testen, aber wollte eigendlich nur mit meiner Leiste (MP3-Player Buttons) solange überlappen, wie die Navigation läuft, so das man beides bedienen kann. |
Re: Form nicht mehr bedienbar
Zitat:
Sagenhaft, gerade getestet, die Desktop Toolbar bleibt immer schon oben !!! :shock: |
Re: Form nicht mehr bedienbar
Wenn dein Programm "StayOnTop" hat und das startende Programm ebenfalls wird dieses über das bereits existierende gesetzt.
Was gemacht werden kann ist, das deine Anwendung regelmäsig prüft ob es das oberste Fenster ist. Wenn nicht muss es sich wieder als "StayOnTop" setzen. |
Re: Form nicht mehr bedienbar
Zitat:
Delphi-Quellcode:
.....obwohl mich die Desktop ToolBar schon reizt, damit könnte ich überall im Programm die MP3-Funktionen nutzen und auch Navigation.
SetWindowPos(navigation_frm.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz