23. november 2006 - 09:29Der er
7 kommentarer og 1 løsning
Form forsvinder ved ALT + TAB.
Hej,
Jeg har to forme: Form1 og Form2.
Form2 er sat til StayOnTop, og skal egentlig altid ligge oven pä Form1.
Problem 1: Hvis mit program er det eneste, som er äbnet i Windows, forsvinder Form2, hvis man trykker ALT + TAB! Den eneste mäde jeg kan fä Form2 vist igen, er ved at genstarte mit program! Er det normalt, og hvordan löses det??
Problem 2: I mit program bliver et Excel ark automatisk äbnet, og Visible sat til True. När dette sker vises Excel dokumentet foran Form1, men Form2 (sat til StayOnTop) vises foran Excel dokumentet! Excel dokumentet skal väre foran alt, og jeg har ikke lyst til noget fusk med Form2.StayOnTop := False; Excel.Visible := True; Form2.StayOnTop := True; eller lignende.
Jeg savner lidt info. Delphi version, Windows version, hvordan skabes dine forms Ved prog.start eller med create. (har ikke kunnet teste dit probl.1 da jeg ikke lige vil lukke alle mine kørende programmer.) Hvad sker hvis du starter andre programmer - dukker dit prog så op ved Alt+Tab ? eller er det blevet lukket?
Probl.2: Sådan som du starter excel-processen, er den vel ejet af dit prog, og din Form2.StayOnTop gælder dermed også excel-vinduet. Alternativt laver du noget der aktiverer dit prog. efter Excel blev synligt, men så ville Form1 vel også ligge over Excel-arket. Har du prøvet at bruge Worksheet().activate ?. Endelig kan en løsning være at finde handlet på excel-vinduet og så aktivere det.
Undskyld det sene svar, og de manglende infos. Delphi 2006 og Windows XP SP2. Mine forms skabes ved programstart.
Form2 forsvinder kun ved ALT + TAB, hvis mit program kører som det eneste i Windows. Hvis jeg har andre programmer kørende, skiftes uden problemer med ALT + TAB. Bemærk, det er kun Form2, der forsvinder.
Du kan bruge nogle windows-kald som EnumWindows, GetClassName og GetWindowText.
if EnumWindows(@test,0) then // test kaldes for hvert top-lever window
hvor 'test' er en Call Back funktion som fx. ligner :
Function test(var Wx: Integer ;var lp:Integer):boolean; var iTegn:integer; FormNavn : array[0..50] of char; FormCaption: array[0..50] of char;
begin iTegn := GetClassName (Wx,FormNavn,50); if (iTegn>0) and (FormNavn = 'XX') then // Noget du leder efter test:=false // så behøver du ikke lede mere // eller test iTegn := GetWindowText(Wx,FormCaption,50); if iTegn>0 then begin ... end end;
Når du lukker din application, lukker excel-vinduet så også?
Iøvrigt synes jeg hellere du skal bruge FormCreate selv i stedet for at lade Delphi create dine forms ved opstart. (gælder selvfølgelig ikke MainFormen)
Efter dit prog. har startet Excel, må dit prog. udføre noget som bringer det i front (igen?). Hvornår startes Excel? Du skrev at både Form1 og Form2 blev skabt fra start. Hvis du starter Excel i en Key-Down rutine kan det være at dit prog. får fokus hvis der er en KeyPreview-rutine eller en Key-up rutine?
Excel startes ved et ButtonClick, følgende kode er de sidste linier i denne procedure:
if (CheckBox4.Checked = True) and (ExcelSaved = True) then begin Excel.Visible := True; Excel.ActiveWorkbook.Activate; end else begin Excel.Visible := False; Excel.WorkBooks.Close; Excel.Quit; end; Excel:=Unassigned;
Findes der ikke et eller andet med Excel.ActiveWorkbook.BringToFront?
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.