Moskus Skrevet 22. mars 2006 Del Skrevet 22. mars 2006 Hei! Jeg har et lite form som skal poppe opp (a la Messenger med beskjeder om at "han/henne har logget på") ved forskjellige intervaller og hendelser. Dette form må selvfølgelig være "On Top", men nå stjeler naturlig nok fokus fra programmet som er i bruk. Hvordan kan jeg hindre det? Lenke til kommentar
oyvind_b Skrevet 22. mars 2006 Del Skrevet 22. mars 2006 Tror ikke det finnes noen måte, men du kan bruke Win32 API-funksjonen ShowWindow(SW_SHOWNOACTIVATE). Øyvind Lenke til kommentar
Moskus Skrevet 22. mars 2006 Forfatter Del Skrevet 22. mars 2006 Interessant! http://msdn.microsoft.com/library/default..../showwindow.asp Lenke til kommentar
Moskus Skrevet 23. mars 2006 Forfatter Del Skrevet 23. mars 2006 Jeg klarer ikke finne noen eksempler der denne er i bruk i VB.net 2005. Vet du om noen? Lenke til kommentar
wolf5 Skrevet 23. mars 2006 Del Skrevet 23. mars 2006 <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Int32) As Long End Function http://www.pinvoke.net/default.aspx/user32/ShowWindow.html Lenke til kommentar
oyvind_b Skrevet 23. mars 2006 Del Skrevet 23. mars 2006 Jeg har ikke prøvd dette, men det er vel bare å deklarere funksjonen slik: <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Int32) As Long End Function Og kalle den slik: ShowWindow(form.Hwnd, 4) (4 = SW_SHOWNOACTIVATE) Se forøvrig PInvoke Øyvind Lenke til kommentar
oyvind_b Skrevet 23. mars 2006 Del Skrevet 23. mars 2006 Hehe, wolf var et minutt før meg, med akkurat samme greia... til og med link til pinvoke Ø Lenke til kommentar
Moskus Skrevet 23. mars 2006 Forfatter Del Skrevet 23. mars 2006 (endret) Ah! Jeg har nok deklarert den på den "gamle" måten, kanskje derfor det ikke fungerte... Takk for hjelpen til begge to! Endret 23. mars 2006 av moskus Lenke til kommentar
Moskus Skrevet 25. mars 2006 Forfatter Del Skrevet 25. mars 2006 Prøvde dette: <Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, Charset:=Runtime.InteropServices.CharSet.Auto)> _ Private Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Int32) As Long End Function Med Private Const SW_SHOWNORMAL = 1 Private Const SW_SHOWMINIMIZED = 2 Private Const SW_SHOWMAXIMIZED = 3 Private Const SW_SHOWNOACTIVATE = 4 Private Const SW_SHOW = 5 Men får beskjed om at: 'System.Runtime.InteropServices.DllImportAttribute' cannot be applied to instance method. Noen som vet hva som er feil? Lenke til kommentar
wolf5 Skrevet 26. mars 2006 Del Skrevet 26. mars 2006 sleng inn en Static i declare private static function ... Lenke til kommentar
Moskus Skrevet 26. mars 2006 Forfatter Del Skrevet 26. mars 2006 I tillegg til feilmeldingen nevnt i forrige post fikk jeg denne: Methods cannot be declared 'Static' Lenke til kommentar
wolf5 Skrevet 28. mars 2006 Del Skrevet 28. mars 2006 Deklarasjonen skal ihvertfall være statisk på et vis. Fant noe annet på nettet jeg ikke har sett før. Kanskje du kan deklarere slik: Private Declare Auto Function ShowWindow Lib "user32" (ByVal hwnd As IntPtr, ByVal lpString As Int32) As Integer Lenke til kommentar
Moskus Skrevet 28. mars 2006 Forfatter Del Skrevet 28. mars 2006 Takk! Det fungerte! Vinduet popper iallfall opp (helt øverst til venstre) og uten verdier, men det lar seg sikkert ordne! Men vinduet stjeler fremdeles fokus... Lenke til kommentar
Moskus Skrevet 28. mars 2006 Forfatter Del Skrevet 28. mars 2006 Men en ting jeg kom til å tenke på. Foreløpig bruker jeg en timer i hovedform'et (som er skjult) til å trigge aktivering av popup formet. Kan det tenkes at det er timeren som stjeler fokus? Vil det da hjelpe å hive denne i en backgroundworker? Lenke til kommentar
wolf5 Skrevet 28. mars 2006 Del Skrevet 28. mars 2006 (endret) Timer skal ikke sette fokus på den kontrollen den kjører på. Og unngå Timer i en backgroundworker. Backgroundworkers hovedtask er å gjøre noe og deretter avslutte. Så fremt ikke timern din avslutter. Du trenger heller ikke dra en Timer ut på formen for å ha en timer. Det holder å deklarere Timer i en hvilken som helst klasse. f.eks Dim mytimer as Timer Endret 28. mars 2006 av wolf5 Lenke til kommentar
Moskus Skrevet 29. mars 2006 Forfatter Del Skrevet 29. mars 2006 Hvis det ikke er timeren, og ikke vil hjelpe å lage en annen trigger i en backgroundworker, må man vel bare konkludere med at ShowWindow ikke fungerer skikkelig... Lenke til kommentar
wolf5 Skrevet 29. mars 2006 Del Skrevet 29. mars 2006 (endret) Testet du med alle de forskjellige konstantene for å se om en av dem gjorde det de skulle? F.eks ShowWindow(handle, SW_SHOWNOACTIVATE) Vil tro denne skal vise men ikke aktivere/sette fokus Fant en greie på det: http://vbnet.mvps.org/index.html?code/faq/activatewin.htm Endret 29. mars 2006 av wolf5 Lenke til kommentar
Moskus Skrevet 29. mars 2006 Forfatter Del Skrevet 29. mars 2006 Testet du med alle de forskjellige konstantene for å se om en av dem gjorde det de skulle?F.eks ShowWindow(handle, SW_SHOWNOACTIVATE) Ja. Men kan hende jeg har misforstått bruken, jeg sa at: Dim frm as New frmPopup ShowWindow(frm.Handle, SW_SHOWNOACTIVATE) Fant en greie på det: http://vbnet.mvps.org/index.html?code/faq/activatewin.htm 5830436[/snapback] Ja, det var faktisk fra den jeg hentet verdiene for konstantene. Det kan jo se ut som jeg gjør riktig iallfall... Lenke til kommentar
wolf5 Skrevet 29. mars 2006 Del Skrevet 29. mars 2006 Bruk koden som er vist på den siden istedet for ShowWindow. De brukte en annen metode. Lenke til kommentar
Moskus Skrevet 29. mars 2006 Forfatter Del Skrevet 29. mars 2006 Ja, får håpe at VB6.0 koden lar seg oversette... prosjektet ligger hjemme så jeg prøver i kveld. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå