Avatar billede centauri Nybegynder
20. maj 2006 - 14:36 Der er 10 kommentarer og
1 løsning

Hjælpe: Knapper ud fra 2 Billeder hvordan ?

Hej

Jeg har nu længe gået og tænkt over hvordan jeg kunne lave et tastatur på skærmen via 2 billeder. Et billeder der viser knapperne i normal tilstand og et andet der viser hvordan knapperne skal se ud når de er trykket ned.
Har se en del på maksing, bitblt og hvad det alt hedder men kan stadig ikke komme på en løsning så håber der her evt var nogen der kunne hjælpe mig ldit på nette vej.

Det skulle helst være sådan at når man trykker på en knap på billedet som der f.eks er lagt et tom Image object på for at lave knap funktionen oven på billedet. Så skulle den helst på en eller anden måde kun vise det område af det andet billede hvor knappen er trykket ned på, på det område knappen nu fylder. Så der viser at knappen er trykked ned.
For vil helst undgå at skulle lave f.eks 60 små billeder for at have knapperne i normal tilstand og nedtrygget tilstand.

Billederne kunne f.eks være
http://www.centauri.dk/eksperten/keyboard-down.jpg
http://www.centauri.dk/eksperten/keyboard-up.jpg

Håber der er nogle der kan hjælpe for er efterhåndne virkelig på bar bund.
Avatar billede martin_moth Mester
20. maj 2006 - 15:34 #1
Hvis hver tast på dit "keyboard" er et selvstændigt billedet (dvs du skal have et billede for hver knap på dit keyboard), kan du når der trykkes på den enkelte tast loade et andet billede, der viser tasten i nedtrykket tilstand.

Eller har jeg misforstået dit problem?
Avatar billede centauri Nybegynder
20. maj 2006 - 16:14 #2
Nej jeg skal trykke på billedet på skørmet hvorpå der så er et tastatur. Således at hvis jeg f.eks på trykker på A på billedet så viser den kun lige det område A knappen fylder fra den anden billede af sådan så man får en visuel efekt af at knappen blev trykket ned.

Vil jo helst undgå at at skulle have så mange enkelt billeder sår skal jo ellers 2 billed filer til for hver knap.

Så er evt at lave en config fil der fortæller hvilket pixel område hver kanp befinder sig indne for. Er så det er nemmere at lave forskellige Skins til programmet.
Avatar billede martin_moth Mester
20. maj 2006 - 17:19 #3
Det tror jeg ikke du kan i VB6. Tror du bliver nødt til at tage hver tast for sig... Men jeg er ikke 100% sikker
Avatar billede centauri Nybegynder
20. maj 2006 - 18:49 #4
Jeg ved det er muligt, for ideen er fra FreeDrive af som netop gør brug af denne funktion. Og det er fuldstændig bygget op i VB 6
http://www.freedrive.co.uk/
Avatar billede martin_moth Mester
20. maj 2006 - 19:53 #5
ok - jeg springer fra så - det er ikke noget jeg har forstand på :o(
Avatar billede tjacob Juniormester
21. maj 2006 - 20:02 #6
Du kan godt lave det med BitBlt.

Lav 2 picture-kontroller med de to billeder. De kan gøres usynlige.
Lav en tredie Picture-kontrol hvorpå du tegner.

Nu skal du have en variabel der indeholder x- og y-placering (øverste venstre hjørne) i pixels for samtlige knapper.
Derudover skal variablen indeholde bredde og højde i pixels for samtlige knapper.

Det nemmeste er at erklære en type f.eks.

Type KnapDimensions
    lX as long
    lY as long
    lWidth as long
    lHeight as long
End Type

Public tKnapper(1 to 42) As Knapdimensions (der er 42 knapper).

Ved initialiserning af programmet (f.eks. i Form_Load) fyldes tKnapper.
Du kan gøre det manuelt, og skrive 4x42 linier kode, eller lave noget beregning; -De fleste knapper har jo samme størrelse, og er placeret i et gitter.

Styring kan foregå med Mouse_Down og Mouse_Up i Picture-kontrollen.
I Mouse_Down (og _Up) får du musens X- og Y-koordinater.

Nu er det en forholdsvis simpel sag at tjekke hvilken knap der er trykket på, og derefter tegne den enten som Op eller Ned.
-F.eks. Tegne Ned-billedet ved Mouse_Down, og Op-billedet ved Mouse_Up.

Du løber igennem tknapper f.eks. sådan:

Dim lIndex as long, i as long (X og Y er input fra Mouse_Eventet)

For i=1 to 42
    If X > tKnapper(i).lX And X < (tKnapper(i).lX + tKnapper(i).lWidth) And Y > tKnapper(i).lY And Y < (tKnapper(i).lY + tKnapper(i).lHeight) Then
        lIndex=i
        Exit For
    End if
Next i
-Det kan godt være der skal justeres lidt med +/- 1 hist og her -prøv dig frem.

Når du ved hvilken knap der er trykket på, så tegner du med BitBlt:

Call BitBlt(-hDC-for-den-Picture-kontrol-der-tegnes-på, tKnapper(lIndex).lX, tKnapper(lIndex).lY, tKnapper(lIndex).lWidth, tKnapper(lIndex).lHeight, -hDC-for-den-Picture-kontrol-der-indeholder-det-billede-du-vil-tegne, tKnapper(lIndex).lX, tKnapper(lIndex).lY, vbSrcCopy)
Avatar billede centauri Nybegynder
21. maj 2006 - 21:14 #7
Puha det var en mundfuld. Men må lige se om jeg kan få sat en eksempel samme der gør brug af denne kode. For den er nu ikke sådan til at oversku specielt ikke den sidste del.
For en funktion til at finde ud af hvilken knap der trykeks på har jeg fået lavet ved at checke på indne for hvilke pixels der er blevet trykket på billedet.

Skal der loades noget specielt for at gøre brug af BitBlt ?
Avatar billede tjacob Juniormester
22. maj 2006 - 06:28 #8
Ang. BitBlt:

Der kræves ikke noget specielt, men du skal huske at erklære den i toppen af et modul eller en form:

Public Declare Function BitBlt Lib "gdi32" _
    (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
    ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _
    ByVal ySrc As Long, ByVal dwRop As Long) As Long
Avatar billede tjacob Juniormester
25. maj 2006 - 18:37 #9
Jeg har lavet et lille testprogram, hvor du kan se hvordan koden fungerer:

http://www.home1.stofanet.dk/5soft/v9cxjk4l/Knapper.zip
-Et MEGET kommenteret projekt.
Dette link vil være aktivt et par uger.

Der er dog forskellige ting der skal justeres; f.eks. hvis en bruger klikker ned på en knap og derefter trækker musen udenfor området før museknappen slippes.

Men, det er blot finjusteringer, der kan klares med lidt errorhandling.
Avatar billede martin_moth Mester
25. maj 2006 - 19:36 #10
blæret !
Avatar billede centauri Nybegynder
29. maj 2006 - 08:50 #11
Jamen det var jo lige nøjagtig sådan noget jeg søgte. Så siger ihverfald 1000 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