03. august 2001 - 16:56Der er
10 kommentarer og 1 løsning
Activation af form
Hvordan får man aktiveret en form. Det skal være relativt platformsuafhængigt, dvs. virke på både Win9x, NT og 2K.
Jeg har selvfølgelig prøvet med alt fra:
BringWindowToTop(Handle); SetActiveWindow(Application.Handle); SetForegroundWindow(Handle); SetActiveWindow(Handle); SetFocus; SetWindowPos(Handle, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_SHOWWINDOW or SWP_NOSIZE); ShowWindow(Handle, SW_SHOW);
og jeg ved ikke hvad jeg ikke har prøvet.
ØNSKET: For at give et eksempel på hvordan det skal bruges kan vi sige at man sætter en timer på 10 sekunder, eller 5. når man kører programmet skifter man over til notepad og begynder at skrive en masse gylle. efter de fem sekunder er gået skal formen blive aktiveret og sætte sin focus til en memokomponent. i memo\'en vil teksten så komme. Man er stædig og går over i notepad igen og skriver. efter yderligere 5 sekunder vil den igen hoppe over til mit program\'s memo.
I virkeligheden skal det dog bruges til noget helt andet.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Direkte fra Delphi\'s hjælp: <SNIP> The following code uses two forms. Form1 has a button on it. The second form is used as a tool palette. This code makes the palette form visible, and ensures it is the top form by bringing it to the front. To run this example, you must add Unit2 in the uses clause of your unit.
... virker fint til at få formen forrest. Men hvis man bruger en timer med interval på 5000 og man sidder og skriver i notepad og bare fortsætter, så får formen ikke focus. Det hjælper ikke med SetFocus eller SetActiveWindow, ej heller BringToFront...
function GetAnimation: Boolean; var Info: TAnimationInfo; begin Info.cbSize := SizeOf(TAnimationInfo); if SystemParametersInfo(SPI_GETANIMATION, SizeOf(Info), @Info, 0) then Result := Info.iMinAnimate <> 0 else Result := False; end;
procedure SetAnimation(Value: Boolean); var Info: TAnimationInfo; begin Info.cbSize := SizeOf(TAnimationInfo); BOOL(Info.iMinAnimate) := Value; SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0); end;
procedure ShowWinNoAnimate(Handle: HWnd; CmdShow: Integer); var Animation: Boolean; begin Animation := GetAnimation; if Animation then SetAnimation(False); ShowWindow(Handle, CmdShow); if Animation then SetAnimation(True); end;
procedure TForm1.Timer1Timer(Sender: TObject); begin if GetActiveWindow=Handle then exit; ShowWinNoAnimate(Application.Handle, SW_MINIMIZE); ShowWinNoAnimate(Application.Handle, SW_RESTORE); end;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.