Avatar billede js_delphi Nybegynder
23. november 2006 - 09:29 Der 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.

Tak for evt. hjälp!
Avatar billede a_nor Nybegynder
23. november 2006 - 12:06 #1
Hej,

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.

mvh.
Avatar billede js_delphi Nybegynder
23. november 2006 - 19:27 #2
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.

Worksheet().activate gør ingen forskel.

Hvordan finder man Handlet på Excel vinduet?
Avatar billede a_nor Nybegynder
24. november 2006 - 10:19 #3
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å?
Avatar billede a_nor Nybegynder
24. november 2006 - 10:22 #4
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)
Avatar billede js_delphi Nybegynder
24. november 2006 - 10:43 #5
Excel forbliver åbnet, når jeg lukker mit program.

Hvis jeg lige minimerer Excel, og derefter maximerer igen, så ligger Form2 ikke længere oven på Excel arket.

Problemet må næsten kunne løses enklere. Det lader jo til at være en generel fejl,
da Form2 forsvinder fuldstændig, hvis man trykker ALT + TAB.

Iøvrigt er det ikke altid at Form2 lægger sig oven over Excel arket, når dette åbnes, kun nogle gange!
Avatar billede a_nor Nybegynder
25. november 2006 - 10:46 #6
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?
Avatar billede js_delphi Nybegynder
28. november 2006 - 09:49 #7
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?
Avatar billede js_delphi Nybegynder
04. december 2007 - 15:54 #8
Træls.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester