[vb] hoe focus niet verliezen bij gebruik container

Pagina: 1
Acties:

  • robbertb
  • Registratie: September 2000
  • Niet online
Ik heb een form, met daarop een picturebox die ik gebruik als container om me dlls te laden. Allee als ik me dll laad in die picturebox, heeft me form geen focus meer waardoor ik de sneltoetsen van het menu niet meer kan gebruiken. Daarnaast staat het niet zo netjes als de titelbalk niet actief wordt weergegeven. Iemand een idee?

  • Jerry
  • Registratie: September 2001
  • Laatst online: 24-03 16:08

Jerry

Who?

Nadat je je dll geladen hebt kan je je focus toch weer terug zetten met:


Visual Basic:
1
form1.setfocus

  • robbertb
  • Registratie: September 2000
  • Niet online
Mr_UnAnimouS schreef op 18 maart 2003 @ 10:50:
Nadat je je dll geladen hebt kan je je focus toch weer terug zetten met:


Visual Basic:
1
form1.setfocus
dat is niet echt een nette oplossing. Daarnaast moet dan elke keer die code aangeroepen worden als je ook maar iets doet in de container... daarnaast wil ik ook toetsen kunnen opvangen in de container zelf.
Ik moet bv tekst in tekstvak kunnen invullen en dan met bv F1-F12 menu blijven bereiken

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ik heb geen kennis van VB, maar is er geen mogelijkheid om je scherm (tijdelijk) modal te maken?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Ik neem aan dat je een form uit die dll met setparent in die picturebox inlaadt? Dit probleem had ik namelijk ook.... ik heb het opgelost door op dat form een frame te plaatsen, daar alle controls in geplakt en vervolgens dat frame in die picturebox geplaats... Dan blijft de titelbalk netjes geactiveerd....

edit:

In het andere topic van je staat de code om deze in te laden: Topic 724878

[ Voor 22% gewijzigd door DukeMan op 18-03-2003 12:45 ]


  • robbertb
  • Registratie: September 2000
  • Niet online
NTGiant schreef op 18 maart 2003 @ 11:52:
Ik neem aan dat je een form uit die dll met setparent in die picturebox inlaadt? Dit probleem had ik namelijk ook.... ik heb het opgelost door op dat form een frame te plaatsen, daar alle controls in geplakt en vervolgens dat frame in die picturebox geplaats... Dan blijft de titelbalk netjes geactiveerd....

edit:

In het andere topic van je staat de code om deze in te laden: Topic 724878

Ja dat bedoel ik inderdaad, de dll die geladen is wordt mbv setparent in de picturebox gezet. De picturebox is dan dus de cotainer.
Maar jouw oplossing is niet bij mij van toepassing denk ik. omdat ik onafhankelijk wil blijven en niet de controls uit de dlls slopen en direct in me project op de frame te plakken

edit: ik heb ook ongeveer die code gebruikt maar dat lost niet mijn probleem op..

[ Voor 5% gewijzigd door robbertb op 18-03-2003 13:25 ]


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
ik ga ook niet los alle controls ophalen, ik heb ik de form in mijn (plugin) dll een frame gemaakt en daar alle controls ingeplakt.... vervolgens heb ik in die dll een GetSettings die de frameset terug geeft, deze wordt vervolgens als child in die picture box gezet. Ik hoef niets te doen met de controls.. die blijven in het frame staan...

ik ben in princiepe ook onafhankelijk, mits alle controls die je wilt zien in je picturebox in dat frame zit...

  • robbertb
  • Registratie: September 2000
  • Niet online
NTGiant schreef op 18 March 2003 @ 14:18:
ik ga ook niet los alle controls ophalen, ik heb ik de form in mijn (plugin) dll een frame gemaakt en daar alle controls ingeplakt.... vervolgens heb ik in die dll een GetSettings die de frameset terug geeft, deze wordt vervolgens als child in die picture box gezet. Ik hoef niets te doen met de controls.. die blijven in het frame staan...

ik ben in princiepe ook onafhankelijk, mits alle controls die je wilt zien in je picturebox in dat frame zit...
mja okeej dat werkt opzich wel aardig.. thanx..
maar mn menu is nou niet altijd bereikbaar met de functietoetsen (F1-F12)... via alt is het wel altijd te bereiken.. beetje vreemd dus.
Daar ook een oplossing voor ?

Verwijderd

Wanneer werken de functietoetsen niet? Wanneer ze het niet doen als een bepaald object gefocussed is kun je misschien bij het event keypress() dit doen:

Visual Basic:
1
Call mnuknop_click()

Verwijderd

NTGiant schreef op 18 March 2003 @ 14:18:
ik ga ook niet los alle controls ophalen, ik heb ik de form in mijn (plugin) dll een frame gemaakt en daar alle controls ingeplakt.... vervolgens heb ik in die dll een GetSettings die de frameset terug geeft, deze wordt vervolgens als child in die picture box gezet. Ik hoef niets te doen met de controls.. die blijven in het frame staan...

ik ben in princiepe ook onafhankelijk, mits alle controls die je wilt zien in je picturebox in dat frame zit...
Toevallig liep ik gister tegen PRECIES hetzelfde probleem aan... maar dit lijkt me een heel aardige oplossing.
Nu heb ik het maar opgelost met SetFocus en SendKeys, maar dat is natuurlijk geen echte oplossing...

  • robbertb
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 24 maart 2003 @ 09:31:
Wanneer werken de functietoetsen niet? Wanneer ze het niet doen als een bepaald object gefocussed is kun je misschien bij het event keypress() dit doen:

Visual Basic:
1
Call mnuknop_click()
dat is ook niet echt een goede oplossing lijkt me, want dan moet ik dat ook bij ALLE componenten doen...

Ik heb het als ik bv in een tekstvak va een gelade dll zit, en dan overschakel naar een ander met F2, en als ik dan weer terug wil met F1 naar vorige dll gaat dat nog geloof ik maar daarna weer F2 werkt dan iet meer.. beetje vaag. Lijkt erop dat probleem is van focus van component ofzo.

Daaraast heb ik ook nog als probleem dat mijn kruisje van me hoofdform niet meer werkt, het programma sluit dan niet af... dat is als ik hem in VB run, maar ik er exe van, werkt dit wel weer goed.

Verder heb ik nog een stukje code, wat hier verder niet zoveel mee te make heeft, maar wat oook niet goed werkt:
Visual Basic:
1
2
3
4
MsgBox "totaal voor omzetting: " & totaal
  If totaal = False Then totaal = True
  If totaal = True Then totaal = False
MsgBox "totaal na: " & totaal

soms zet hij de boolean niet om :s dan is msgbox voor en na ongewijzigd
En als ik em onder vb start dan zegt ie bij de eerste messagebox totaal = ONWAAR
en bij de 2e totaal=false :/
Alsof vb beetje in de war is en de ene keer op zn engels doet en daarna op Nederlands. Ik probeerde net weer en had voor: totaal = onwaar en na: totaal=onwaar.
Terwijl ik toch bij de general declarations heb staan:
"Dim totaal As Boolean"

[ Voor 17% gewijzigd door robbertb op 24-03-2003 11:01 ]


Verwijderd

Zo:

Visual Basic:
1
2
3
4
5
6
7
MsgBox "totaal voor omzetting: " & totaal
     If totaal = False Then
          totaal = True
     Else
          totaal = False
     End If
MsgBox "totaal na omzetting: " & totaal

[ Voor 12% gewijzigd door Verwijderd op 24-03-2003 11:27 ]


Verwijderd

Visual Basic:
1
2
3
MsgBox "totaal voor omzetting: " & totaal
  totaal = Not totaal 
MsgBox "totaal na: " & totaal

Is nog makkelijker :)
(Dit draait de waarde altijd om, bij jouw code ging hij 'm twee keer omdraaien...)

  • robbertb
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 24 March 2003 @ 14:23:
Visual Basic:
1
2
3
MsgBox "totaal voor omzetting: " & totaal
  totaal = Not totaal 
MsgBox "totaal na: " & totaal

Is nog makkelijker :)
(Dit draait de waarde altijd om, bij jouw code ging hij 'm twee keer omdraaien...)
Hms deze oplossing is natuurlijk nog mooier dan bovenstaande.. maar bovenstaande werkte al..
Maargoed snap niet waarom hij in mijn geval niet werkte, wat ik had staan zou toch ook moeten werken?

Maargoed even wat meer ontopic:
Iemand al idee waarom de functietoetsen van menu niet altijd meer werken? (van de zelfgemaakte applicatie)

[ Voor 16% gewijzigd door robbertb op 24-03-2003 21:45 ]


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 23:42

johnwoo

3S-GTE

robbertb schreef op 24 maart 2003 @ 21:39:
[...]

Hms deze oplossing is natuurlijk nog mooier dan bovenstaande.. maar bovenstaande werkte al..
Maargoed snap niet waarom hij in mijn geval niet werkte, wat ik had staan zou toch ook moeten werken?

Maargoed even wat meer ontopic:
Iemand al idee waarom de functietoetsen van menu niet altijd meer werken? (van de zelfgemaakte applicatie)
Als ie False is werkt die code inderdaad niet; de eerste regel maakt hem True, waarna de tweede regel hem vrolijk weer op False zet :P

Voor wat betreft het focus probleem: dat zou kunnen komen doordat de windows die je in de picturebox gooit met SetParent stiekum geen childwindows zijn, maar 'gewone' windows (ook al hebben ze een parent). Je zou eens kunnen proberen om de WS_CHILD flag voor die windows aan te zetten.
Om dat te bereiken gebruik je eerst GetWindowLong met GWL_STYLE om de huidige style op te vragen, vervolgens het WS_CHILD bitje op 1 te zetten (met een bitwise OR), en die nieuwe style aan de window te geven met SetWindowLong.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Verwijderd

Verwijderd schreef op 24 March 2003 @ 14:23:
Visual Basic:
1
2
3
MsgBox "totaal voor omzetting: " & totaal
  totaal = Not totaal 
MsgBox "totaal na: " & totaal

Is nog makkelijker :)
(Dit draait de waarde altijd om, bij jouw code ging hij 'm twee keer omdraaien...)
IDD dat werkt ook, in dit geval, maar stel dat je een string hebt met drie mogelijk heden en in het gevan hij een van de 2 eerst is moet z'n waarde veranderen, dan werkt jouw code niet, de mijne is universeler.
Pagina: 1