Avatar billede tdaugaard Nybegynder
10. juni 2000 - 14:04 Der er 11 kommentarer og
1 løsning

ActiveX Controller: Hvordan finder jeg ud af hvor min control er placeret ??

Hejsa!

Jeg er i gang med at lave en ActiveX control og jeg tænkte på om der var nogle der viste hvordan jeg finder ud af min control's placering på formen.

Altså f.eks., jeg smider den på en form (Standard EXE project) og I controllen's kode vil jeg gerne finde ud af dens .Left og .Top properties.

Jeg vil helst undgå SubClassing da det for det meste fucker up før man få det til at virke helt, men hvis det er det der skal til så er det helt oki!
Avatar billede tdaugaard Nybegynder
11. juni 2000 - 17:03 #1
300p mere!!! Det må da hjælpe nogle på vej til at finde svaret for mig!
Avatar billede sjensen Nybegynder
11. juni 2000 - 23:34 #2
Hvorfor lader du ikke bare den form du smider den på fortælle dig det ?

Lad formens create og evt. OnIdle events skrive de 2 værdier i et par vars du bruger/har i den activex kontrol !

Ellers mu det vel være i kontrollens OnActivate event du kan gøre det.
Avatar billede baunsgaard Nybegynder
11. juni 2000 - 23:49 #3
Efter lidt forskning/genopfriskning har jeg fundet løsningen!

Mellem din VB form og din VB kontrol findes der et objekt, som hedder en extender! Dette container objekt indeholder de properties du forespørger og kan hentes nemt på denne måde:

sub VisPos()
  msgbox "(" & Extender.Left & ", " & Extender.Top & ")"
end sub

Mvh
Avatar billede tdaugaard Nybegynder
11. juni 2000 - 23:56 #4
Det kan jeg ikke.
Det er ikke meningen at man via formen, eller en OnClick event skal "lave noget selv" for at den ved det.

Det er en Flat Combo box jeg laver (ja, ja .. hvorfor opfinde hjulet igen ...) og der bliver dropdown listen vist i en form INDEN i kontrollen og der skal jeg vide hvor jeg skal placere den på skærmen (helst gerne under min kontrol *S*)

Det er MEGET besværligt at forklare.

Skematisk:

Jeg har en form. Form1
Jeg smider min kontrol på [Form1]. ThreeDCombo
Når der klikkes på min kontrol ska den finde ud af hvilket værdi Form1.ThreeDCombo.Top og Form1.ThreeDCombo.Left. Min kontrol aktiverer derefter en Form (frmList) der er INDEN i kontrollen som den skal placerer lige nedenunder sig selv.

Dvs.
frmList.Left = Form1.ThreeDCombo.Left
frmList.Top  = form1.ThreeDComob.Top + 130 (eller noget i den retning.)

men det kan man jo ikke ... ikke engang Usercontrol.Left eller .Top virker.
Avatar billede tdaugaard Nybegynder
11. juni 2000 - 23:57 #5
Okay, den kommentar var til Sjensen ... ikke til dig baunsgaard.. tester lige ...
Avatar billede tdaugaard Nybegynder
12. juni 2000 - 00:04 #6
<< baunsgaard >>

U'R DA MAN!!!

Jeg har prøvet at finde svaret på dette i snart LAAAAAAAAAANG tid ...
Det kostede mig, men what the hell!!!!

Yipiiiiii..

MANGE TAK!!
Avatar billede baunsgaard Nybegynder
12. juni 2000 - 00:11 #7
Jeg er ked af at jeg først lagde mærke til spørgsmålet nu! Jeg er ikke så ofte på eksperten.dk mere.

Du får et gratis svar næste gang, ok :-)

Avatar billede tdaugaard Nybegynder
12. juni 2000 - 00:17 #8
Det er helt i orden!

Først startede jeg på 200p - ingen respons, 500p - stadig ingen .. 1000p og et henvisnings ? så var den der!!

Det var alle 1000 point værd!!!

Fino :)
Avatar billede tdaugaard Nybegynder
12. juni 2000 - 00:23 #9
DAMN!!! Der fik jeg dummet mig godt og grundigt.

Jeg skulle også vide hvor formen er placeret på skærmen, ellers nytter det jo ikke noget!!!

Kan du også hjælpe mig med det sådan lige ?? (baunsgaard)

Jeg tror der skal subclassing til her ...
Avatar billede baunsgaard Nybegynder
12. juni 2000 - 09:57 #10
Nu ved jeg ikke 100% hvad du har gang i, men hvad en sådan løsning:

Declare POINTAPI            ' Find disse i API viewer
Declare ScreenToClient      ' do

Dim p as POINTAPI
p.x = 0
p.y = 0
call ScreenToClient(hWnd, p)
MsgBox "(" & p.x & ", " & p.y & ")"

Der har du din kontrols venstre toppunkt i skærmkoordinater. Du får måske også brug for at kende til Screen.TwipsPerPixelX og Screen.TwipsPerPixelY

Lad mig høre om det var det!

Mvh
Avatar billede tdaugaard Nybegynder
12. juni 2000 - 14:50 #11
Jeg tester lige i løbet af aftenen, så vender jeg lige tilbage.
Avatar billede tdaugaard Nybegynder
13. juni 2000 - 20:20 #12
<< baunsgaard >>

Det virkede helt perfekt! Dog måtte jeg bruge Abs() på X og Y da de var negative, men ellers var det helt fint!

Endnu engang mange tak!
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