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 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
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.