Avatar billede paultodobom Nybegynder
29. august 2004 - 19:04 Der er 6 kommentarer og
1 løsning

ListBox ovenover MSFlexGrid med API kald

Hej.
Jeg har lavet en ActiveX control som bygger videre på MSFlexGrid. Bl.a. bruger jeg en listbox til at vise flere valgmuligheder. (combobox'en er fravalgt fordi den ikke kan gøres mindre end 315 px i højden) Mit problem er, at når listboksen går ud over MSFlexGrid'ens rammer vises disse dele af boksen ikke. Jeg skal altså bruge et API kald som kan sende listboksen øverst i formen. Hvordan gør jeg det?
Avatar billede kabbak Professor
29. august 2004 - 19:38 #1
er det ikke

List1.ZOrder 0
du skal have fat i. ?
Avatar billede paultodobom Nybegynder
29. august 2004 - 20:24 #2
Nej, for den virker kun indenfor samme lag. Flexgrid'en har åbenbart et højere lag end eller også er det formen der blokerer. Jeg skal bruge en API funktion.
Avatar billede paultodobom Nybegynder
30. august 2004 - 09:46 #3
Jeg er ved at kredse mig ind på en løsning. Listboksen skal tilsyneladende have Windows Desktop'en som parent. Den skal for, eksempelvis, at kunne overskride form'ens kanter.
Avatar billede paultodobom Nybegynder
30. august 2004 - 09:47 #4
[Tekstrettelse] Det skal den for, eksempelvis, at kunne overskride form'ens kanter.
Avatar billede paultodobom Nybegynder
03. september 2004 - 10:59 #5
Jeg har ikke glemt mit spørgsmål. Jeg vender tilbage med en løsning. Eller hvis du har et tip er du velkommen.
Avatar billede paultodobom Nybegynder
01. oktober 2004 - 10:10 #6
Okay, så er jeg kommet et skridt videre. Jeg har altså en listboks på min form. Denne listboks har formen som parent. Når listboksen vises og går ud over formens grænser forsvinder denne del af den. Den umiddelbare løsning er, at reparent'e listboksen fra formen til desktop'en. Det gøres med følgende kode:

Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, _
    ByVal hWndNewParent As Long) As Long

Private Sub ReparentLB()
    Dim lngDesktopWin As Long
   
    ' Få fat i desktop vinduets hwnd
    lngDesktopWin = GetDesktopWindow()
    ' Her får listboksen sine nye parent
    SetParent List1.hwnd, lngDesktopWin
    ' Herunder sættes listboksen placering og den gøres synlig
    List1.Left = Form1.Left + 200
    List1.Top = Form1.Top + 2400
    List1.Visible = True
End Sub

Nu er mit problem bare, at listboksen ikke umiddelbart reagerer på museklik etc. Den virker død.

Her er et par links som indtil videre har hjulpet mig:

http://lists.topica.com/lists/VB6Helper/read/message.html?mid=809080122&sort=d&start=5
http://www.freevbcode.com/ShowCode.Asp?ID=2835

Jeg har søgt på google med søgeordene: user-drawn, SetParent, GetDesktopWindow, vb6, combobox og listbox i forskellige kombinationer.
Jeg har også forsøgt at finde en måde at gøre combobox'en (i VB6's toolbox) mindre i højden ved at sætte font-size, men den kan desværre ikke gøres mindre end 8 (klik på "..." i Font i Property Window i VB6.
Jeg vender tilbage med mere. Hvis du har gode idéer og forslag modtages de gerne.
Mvh
Paul
Avatar billede paultodobom Nybegynder
17. december 2004 - 07:35 #7
Det er vist på tide at lukke spm. Jeg er i princippet ikke kommet videre i forhold til sidste kommentar. Her er dog et par hints til den der vil forsøge: søg på nettet med flg. keywords: vb combobox control user-drawn. Søg evt. efter SetParent og GetDesktopWindow.
Konkret løste jeg mit problem ved at købe ComponentOne's AxtiveX Studio pakke. Den indeholdt den control jeg havde brugt for (og mere til).
Mvh Paul
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

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