Millä uusi nappi otsikkopalkkiin (missä on ruksit, pienennys jne) niinkun eMulessa? Kuva: http://koti.mbnet.fi/atteke/nappi.PNG kieli: VB
Enpä VB:stä tiedä mutta tuolla on C++ esimerkki http://www.catch22.org.uk/tuts/titlebar.asp
mitä tolla uudella napilla tekee?
eMulessa se laittaa sen SystemTrayhyn..
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 FunctionFORMIIN
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
Mites sen saisi tekemään sitten?
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ää.
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öö"'!
Petrinm: Teitkö tuon koodin itse vai kopioitko jostakin?
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??
Googlesta löysin!
Näyttäisi olevan italiaa...
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.
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?
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.
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
Hmm, eipä toi "Manifest-kikka" toimi... Aina että kokoonpano on virheellinen :(
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
Blaze kirjoitti:
Ei silloin, kun VB on kyseessä ^_^
Älä kysy, miksi.
Mutta entäs silloin, kun ohjelman kääntää EXE:ksi?
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.
Tavallaan huono toi manifest, kun väripaletista häviää värit :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.