Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Uusi nappi

Sivun loppuun

Bill Keltanen [24.04.2004 12:19:28]

#

Millä uusi nappi otsikkopalkkiin (missä on ruksit, pienennys jne) niinkun eMulessa? Kuva: http://koti.mbnet.fi/atteke/nappi.PNG kieli: VB

Linkku [24.04.2004 12:42:07]

#

Enpä VB:stä tiedä mutta tuolla on C++ esimerkki http://www.catch22.org.uk/tuts/titlebar.asp

tuomas [24.04.2004 13:10:22]

#

mitä tolla uudella napilla tekee?

Bill Keltanen [24.04.2004 13:23:15]

#

eMulessa se laittaa sen SystemTrayhyn..

petrinm [24.04.2004 13:55:59]

#

Tossa on se napin lisäys, mutta kun nappia painaa mitään ei tapahdu!

MODULIIN

Option Explicit
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As Rect) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook&) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Type Rect
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Type CWPSTRUCT
    lParam As Long
    wParam As Long
    Message As Long
    hwnd As Long
End Type
Private MiaFormHandle As Long

Const Leveys = 20
Const Korkeus = 20
Const XX = 100
Const YY = 6

Const WM_MOVE = &H3
Const WM_SETCURSOR = &H20
Const WM_NCPAINT = &H85
Const WM_COMMAND = &H111
Const SWP_FRAMECHANGED = &H20
Const GWL_EXSTYLE = -20
Private WHook&
Private ButtonHwnd As Long

Public Sub Init(MiaForm As Form, TestoPulsante As String)
    MiaFormHandle = MiaForm.hwnd
    ButtonHwnd& = CreateWindowEx(0&, "Button", TestoPulsante, &H40000000, 50, 50, 14, 14, MiaFormHandle, 0&, App.hInstance, 0&)
    Call ShowWindow(ButtonHwnd&, 1)
    WHook = SetWindowsHookEx(4, AddressOf HookProc, 0, App.ThreadID)
    Call SetWindowLong(ButtonHwnd&, GWL_EXSTYLE, &H80)
    Call SetParent(ButtonHwnd&, GetParent(MiaFormHandle))
End Sub

Public Sub Terminate()
    Call UnhookWindowsHookEx(WHook)
    Call SetParent(ButtonHwnd&, MiaFormHandle)
End Sub

Public Function HookProc&(ByVal nCode&, ByVal wParam&, Inf As CWPSTRUCT)
    Dim FormRect As Rect
    Static LastParam&
    If Inf.hwnd = GetParent(ButtonHwnd&) Then
        Debug.Print "pöö"
        If Inf.Message = WM_COMMAND Then
            If LastParam = ButtonHwnd& Then
                 Call Screen.ActiveForm.cmdInTitlebar_Click
            End If
        ElseIf Inf.Message = WM_SETCURSOR Then
            LastParam = Inf.wParam
        End If
        ElseIf Inf.hwnd = MiaFormHandle Then
        If Inf.Message = WM_NCPAINT Or Inf.Message = WM_MOVE Then
            Call GetWindowRect(MiaFormHandle, FormRect)
            Call SetWindowPos(ButtonHwnd&, 0, FormRect.Right - XX, FormRect.Top + YY, Leveys, Korkeus, SWP_FRAMECHANGED)
        End If
    End If
End Function

FORMIIN

Private Sub Form_Load()
  Call Init(Me, "?")
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Call Terminate
End Sub

Public Sub cmdInTitlebar_Click()
  MsgBox "Toimii!", vbInformation
End Sub

Bill Keltanen [24.04.2004 14:20:04]

#

Mites sen saisi tekemään sitten?

Blaze [24.04.2004 15:40:15]

#

Muuten hyvä, mutta pikkuisen turhan iso tuo nappi ^_^
http://pp.kpnet.fi/blaze/temp/ekstranappi.png
XP-teeman kanssa koko on oikea, mutta väritys vähän hassu...
http://pp.kpnet.fi/blaze/temp/ekstranappixp.png

Bill Keltanen kirjoitti:

Mites sen saisi tekemään sitten?

Enpäs nyt kyllä ihan heti keksinyt, missä tuo mättää.

petrinm [24.04.2004 18:05:14]

#

Tuohon alukuun olen tehnyt tollaset, joska helpottaa koon muuttamista!

Const Leveys = 20
Const Korkeus = 20
Const XX = 100
Const YY = 6

Ja se virhe on jossain tossa viimeisessä functiossa.
Koitin sitä selvittää, jonka takia siellä lukee 'Debug.Print "pöö"'!

remontti-reiska [24.04.2004 22:34:32]

#

Petrinm: Teitkö tuon koodin itse vai kopioitko jostakin?

Bill Keltanen [25.04.2004 07:20:49]

#

Kyllä kai kopioi, muttei se haittaa.. Miten Blaze sait sen XP-napiksi? Mulla se on tyhmä 98-nappi :( vaikka xp theme in XP
Edit: Miten muuten saat ton eMulen lataa noin nopeesti??

petrinm [25.04.2004 10:01:35]

#

Googlesta löysin!

Antti [25.04.2004 10:11:54]

#

Näyttäisi olevan italiaa...

Meitzi [25.04.2004 13:26:39]

#

Tuollainen nappi taitaa olla mahdoton tehdä täysin toimivaksi. Normaalistihin noita ikkunan nappeja ei piirrää ohjelma ollenkaan vaan Windows. Ja riippuen Windowsin koko, väri, teema ym asetuksista ne voi olla vähän mitä vain. Eli itse tehty nappi taitaa tulla väkisinkin jollain väärin.

hunajavohveli [25.04.2004 13:43:43]

#

Niin, eikös homma toimi niin, että ohjelmalla on vain muistissa, että mitä nappeja palkissa on, mutta Windows piirtää ne napit riippuen tietysti versiosta. Eli ohjelmaa voisi pyörittää vaikka jollain 3.1:llä niin sen pitäisi silloin piirtää sellaiset napit, kuin 3.1:ssä on. Ja jos XP:stä on teemaksi pistetty XP, niin eikö ne napit pitäisi XP-nappeina näkyä riippumatta siitä, mitä ohjelmaan on pistetty?

Blaze [25.04.2004 13:44:40]

#

Bill Keltanen kirjoitti:

Miten Blaze sait sen XP-napiksi?

Manifest-kikalla: http://vbnet.mvps.org/code/forms/vbidexp.htm

Bill Keltanen kirjoitti:

Edit: Miten muuten saat ton eMulen lataa noin nopeesti??

Nopeesti? Ei tällä yhteydellä voi ladata nopeesti.

Edit:

hunajavohveli kirjoitti:

Ja jos XP:stä on teemaksi pistetty XP, niin eikö ne napit pitäisi XP-nappeina näkyä riippumatta siitä, mitä ohjelmaan on pistetty?

Ei silloin, kun VB on kyseessä ^_^
Älä kysy, miksi.

Meitzi [25.04.2004 14:11:33]

#

VB6:n ja .NET (suunniteluvaiheessa) saa myös näyttämään ne napit oikein kun pistää .manifest tiedoston itse IDE ohjelmaan. Eli VB6:ssa tekee VB6.EXE.manifest ja .NET:ssä tekee Common7\IDE\devenv.exe.manifest

Bill Keltanen [25.04.2004 15:06:42]

#

Hmm, eipä toi "Manifest-kikka" toimi... Aina että kokoonpano on virheellinen :(

Meitzi [25.04.2004 17:01:42]

#

Ainiin, VB6:ssa pitää lisätä pari riviä koodia.
http://support.microsoft.com/default.aspx?scid­=kb;en-us;309366

http://koti.mbnet.fi/meitzi/vb6xpteemat.jpg
http://koti.mbnet.fi/meitzi/NETxpteemat.jpg

hunajavohveli [25.04.2004 20:45:27]

#

Blaze kirjoitti:

Ei silloin, kun VB on kyseessä ^_^
Älä kysy, miksi.

Mutta entäs silloin, kun ohjelman kääntää EXE:ksi?

Blaze [25.04.2004 21:00:30]

#

hunajavohveli kirjoitti:

Mutta entäs silloin, kun ohjelman kääntää EXE:ksi?

Ei ne teemat toimi siltikään ilman tuota manifestia. Tuossa Meitzin heittämässä Knowlegde Base -artikkelissa oli jonkunlainen selityskin siitä, miksei.

Bill Keltanen [26.04.2004 08:36:32]

#

Tavallaan huono toi manifest, kun väripaletista häviää värit :D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta