[VB6]Size Limiten / Treeview Dubbelklik

Pagina: 1
Acties:

  • Scyth
  • Registratie: Juli 2001
  • Laatst online: 16-03-2024

Scyth

Fat finger, three beer

Topicstarter
Ik heb twee vraagjes, waar ik het antwoord nog niet van heb gevonden op verscheidene VB sites.

De eerste: Hoe limit ik via een API call oid de size van een venster? Ik wil _niet_ het über-lame

code:
1
If frmMain.Width < 1000 Then frmMain.Width = 1000


gebruiken, want je kan dan alsnog met je muis blijven doorververkleinen tussen de snapbacks van je code in. ...niet mooi.
Ik heb ooit iets gevonden om dit te doen, maar ben het kwijt, en kan het nergens weer vinden :'(

De tweede vraag was: Hoe kan ik in de NodeClick event van een treeview detecten of het dmv. een dubbelklik is geklikt? (Zoals in windows explorer 1x klikken is selecteren, dubbelklikken is run file...)

Dell Studio XPS 16
Project: BavBierSub 1.0 BavBierSub 2.0


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 24-08 18:20

johnwoo

3S-GTE

Punt 1: ik heb hier nog n controltje genaamd 'sizelimit' liggen, je kunt em hier vinden. In je Form_Load event handler stel je de formHwnd in en zet je vervolgens Enabled op True.

Punt 2: gewoon het dblclick event afvangen, en daarin kijken naar TreeView.SelectedItem. Op deze manier krijg je echter ook doubleclicks binnen als je niet op het geselecteerde item dubbelklikt. Om dat te voorkomen kan je in je MouseDown event het geselecteerde item opgeven met HitTest. Ofwel:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
Private Sub tv_DblClick()
    If Not tv.SelectedItem Is Nothing Then
        MsgBox tv.SelectedItem.Text
    End If
End Sub

Private Sub tv_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    Set tv.SelectedItem = tv.HitTest(x, y)
End Sub

[ Voor 10% gewijzigd door johnwoo op 02-02-2003 21:44 ]

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


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Scyth schreef op 02 February 2003 @ 18:04:
De eerste: Hoe limit ik via een API call oid de size van een venster?
Kan bij mijn weten niet met een directe call, dus dat wordt subclassen.

De window-message die je moet afvangen daarvoor is WM_GETMINMAXINFO. Op verschillende sites waaronder www.codeguru.com/vb is wel het nodige daarvoor te vinden, "subclassing switchboard" heette er dacht ik eentje die ik wel goed vond.

De lParam bevat een pointer naar een MINMAXINFO struct, die kun je met de copymemory API kopieeren naar een variabele van dat type, minmax.ptMinTrackSize.x en minmax.ptMinTrackSize.y zetten (in pixels), met copymemory terug kopieeren in lParam, en niet vergeten de windowproc op "afgehandeld" zetten (1 teruggeven).

Voor copymemory gebruik ik trouwens deze declaraties (voor deze subclass dan), scheelt weer geklooi tijdens de aanroep met byval/byref gedoe (in de originele declaratie in de API viewer staan ze As Any)
Visual Basic:
1
2
3
4
' pointer naar een MINMAXINFO type kopieëren naar een variable van dat type
Private Declare Sub CopyMemoryToMinMaxInfo Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As MINMAXINFO, ByVal hpvSource As Long, ByVal cbCopy As Long)
' variable MINMAXINFO terug kopieëren naar de pointer
Private Declare Sub CopyMemoryFromMinMaxInfo Lib "kernel32" Alias "RtlMoveMemory" (ByVal hpvDest As Long, hpvSource As MINMAXINFO, ByVal cbCopy As Long)

En in de windowsproc gebruik ik
Visual Basic:
1
2
3
4
5
6
7
8
9
' lParam is een pointer naar de minmaxinfo structure, even kopieeren
CopyMemoryToMinMaxInfo MinMax, lParam, Len(MinMax)
' waardes zetten
MinMax.ptMinTrackSize.x = Width_die_je_wilt
MinMax.ptMinTrackSize.y = Height_die_je_wilt
' en weer terug kopieeren
CopyMemoryFromMinMaxInfo lParam, MinMax, Len(MinMax)
' windows zeggen dat wij deze msg hebben afgehandeld
WindowProcResize = 1

[ Voor 5% gewijzigd door Crazy D op 02-02-2003 23:52 ]

Exact expert nodig?


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 24-08 15:34

mulder

ik spuug op het trottoir

Is het niet makkelijker om dit gewoon in de OnResize af te vangen?

oogjes open, snaveltjes dicht


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Don Facundo schreef op 02 February 2003 @ 23:55:
Is het niet makkelijker om dit gewoon in de OnResize af te vangen?
Als je het via een subclass doet, ziet het er netjes uit (kun je gewoon niet kleiner (of groter) resizen dan dat je opgeeft, in het form-resize event, ziet het er triest uit. Je kunt met de muis wel verder resizen, alleen resize je de form dan iedere keer, wat er gewoon lelijk uitziet.

Exact expert nodig?


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 24-08 18:20

johnwoo

3S-GTE

Dat controltje wat ik hierboven postte werkt idd met subclassing. Het is echt de makkelijkste manier, je sleurt em op je form en stelt formHwnd en Enabled in, en het werkt :)
(natuurlijk wel even de usercontrol en module toevoegen aan je project ;) )

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


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
johnwoo schreef op 02 February 2003 @ 21:41:
Punt 1: ik heb hier nog n controltje genaamd 'sizelimit' liggen, je kunt em hier vinden. In je Form_Load event handler stel je de formHwnd in en zet je vervolgens Enabled op True.
Gebruik ik ook, maar ik heb 'm niet in mijn form_load staan maar form_activate. Waarom? Open maar eens 2 forms met dat ding erop in hetzelfde project. Resize dan beide forms en wat blijkt? Je kunt 1 van de 2 doodleuk kleiner maken. Als je 'm in de Activate zet wordt 'ie telkens opnieuw ge-init waardoor je als je tussen de forms schakelt toch gebruik kunt maken van de OCX.

P.s. Leuke bug, heb ik zelf behoorlijk lang naar gezocht....Bleek zooooo simpel ;)

/edit/
Zou kunnen dat het probleem zich alleen voordoet in MDI-childs (dat is waar ik het probleem ondervond). Heb effe geen tijd om te testen of dit ook bij "normale" forms het geval is...

[ Voor 13% gewijzigd door RobIII op 03-02-2003 12:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Scyth
  • Registratie: Juli 2001
  • Laatst online: 16-03-2024

Scyth

Fat finger, three beer

Topicstarter
johnwoo schreef op 02 February 2003 @ 21:41:
Punt 1: ik heb hier nog n controltje genaamd 'sizelimit' liggen, je kunt em hier vinden. In je Form_Load event handler stel je de formHwnd in en zet je vervolgens Enabled op True.
JohnWoo, zou jij mij dit controltje willen opsturen? Je link werkt niet. Zie e-mail in profile

Dell Studio XPS 16
Project: BavBierSub 1.0 BavBierSub 2.0

Pagina: 1