![]() |
Anzeige:
|
|
|||||||
| Spezielles Für die Bereiche API, Subclassing, Inline-Assembler, Prozesse, ect. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Hallo zusammen,
ich hatte mal wieder Lust am Aussehen meines Xprofan-Fensters zu schrauben. Herausgekommen ist dabei eine kleine DLL, die das für mich erledigen kann. Ich lann damit Rahmen und Titelleiste verändern. siehe Bild. Ich habe die Dll zwar ausgiebig getestet, ab wenn der Eine oder Andere auch ein wenig spielen möchte, dann nur zu. Vielleicht gibt es ja noch Anregungen dazu. Das Test-Programm ist für die letzte Freeware-Vollversion Xprofan8 geschrieben. Bitte unbedingt die PDF-Datei lesen. Für die Nicht-Xprofaner liegt auch eine EXE-Version des Testprogrammes dabei. Download hier. xframedll.zip
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Klasse, ich liebe solche Dlls!!
Einige kleine Unschönheiten sind mir unter Windows 7 aufgefallen: ![]() Beim Start der Exe fehlt oben der Buttonteil. Dann ist mir noch eine kleine Unregelmässigkeit beim Schliessen-Button aufgefallen. Der Button funktioniert, aber der Mauscursor ist unpassend: Und der Knopf "Wechsel 4" scheint im Demo keine Funktion zu haben.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#3 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Hallo Frank,
das sind beides Sachen, die mir beim Umschreiben nach Xprofan8 passiert sind. Einmal hatte ich dabei Probleme mit der Toolbar ( hatte schon vergessen wie das geht per API ) Das Button4 scheinbar keine Funktion hat, liegt daran, dass ich einfach vergessen hatte, die anderen beiden Systembuttons einzufügen, dann würdest du sehen, dass die verschwinden. Das mit dem Closebutton ist mir auch aufgefallen, aber dafür gibt es ja eine Funktion in der Dll. daimt kannst Du die Buttons nach links schieben. Ich werde mal ein komplexeres Beispiel fertig machen, dann allerdings für Xprofan11.2
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Ein Beispiel für die aktuelle XProfanversion ist doch ok. Ich werde das nächste Tage mal intensiver testen.
Ich find's gut, dass du das als Dll realisiert hast, und nicht als Unit.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#5 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Naja, eine Unit kann sich ja jeder selber dafür machen.
Nochmal zum XP-Style ungefähr so Code:
Set("Errorlevel",-1)
If External("UxTheme.dll","IsThemeActive")
AdjustWindow(52,12,18,$FFFF)
SetGradient(~GetSysColor(~COLOR_GRADIENTACTIVECAPTION),~GetSysColor(~COLOR_GRADIENTACTIVECAPTION),1)
SetFrameGradient(~GetSysColor(~COLOR_GRADIENTACTIVECAPTION),~GetSysColor(~COLOR_GRADIENTACTIVECAPTION),1)
SetButtonIndent(6)
Else
AdjustWindow(24,2,18,$FFFF)
Endif
Set("Errorlevel",0)
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Voll geil! Habs noch nicht getestet, aber steht ganz oben auf meiner Liste!
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#7 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Habe ein Update hochgeladen, mit angepasstem ersten Code und neuem Code, der zeigt, wie ein Toolbarmenü durchsichtig macht
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#8 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Beim zweiten Beispiel wird leider das Rebarcontrol nicht mit deaktiviert, wenn das Fenster den Focus verliert. Ansonsten spitzenmäßig!
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#9 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Klappt hervoragend!
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#10 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Deaktiviert wird da gar nichts, nur der Rahmen und die Titelleiste wird eingegraut. Kannst Du gut sehen wenn du mit der Maus über die System-Buttons gehst, die ändern sich auch. Das sollte nicht so schlimm sein, ist ja bei anderen Fenstern genauso. Schalte mal das Forum-Fenster auf deaktiv und sieh was passiert, wenn Du mit der Maus drüberfährst.
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#11 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Aber das Menü wird im Forum-Fenster mit verändert (in dem Falle müsste es eingegraut werden). Bei 7 ist es so ein Verwischeffekt, hab ein Addon, dass FF auch transparent macht wie den Explorer.
Jac
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#12 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
Auch bei anderen Fenstern, z.B. dem Explorer wird immer nur der Rahmen und die Titelleiste eingegraut wenn das Fenster deaktiviert ist.
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#13 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Im Explorer von 7 nicht. Vielleicht kannst du das ja optional einbauen, weil ich es zum Beispiel viel harmonischer finde.
Ist Transparenz auch möglich?
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#14 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
Transparenz ist nicht möglich. Menü eingrauen kann ich in die Dll kaum einbauen. Die behandelt ausschliesslich den Rahmen und die Titelleiste. Aber dafür gibt es eine Lösung. Du musst die Message WM_ACTIVATE abfangen, ein paar Bilder,Brush usw.. anlegen, ich zeig's Dir am Beispiel, ist einfacher. Sieh mal was ich bei "Caseof ~WA_INACTIVE" gemacht habe. Code:
$H windows.ph
$H messages.ph
$I XFrameDll.Inc
Struct TBBUTTON = iBitmap&,idCommand&,fsState#(1),fsStyle#(1),bReserved#(2),dwData&,iString&
Struct Rect = left&,top&,right&,bottom&
struct COLORADJUSTMENT =\
caSize%,\
caFlag%,\
caIlluminantIndex%,\
caRedGamma%,\
caGreenGamma%,\
caBlueGamma%,\
caReferenceBlack%,\
caReferenceWhite%,\
caContrast%,\
caBrightness%,\
caColorfulness%,\
caRedGreenTint%
Declare Ende&,Dll&
Declare TB_Buttonstrings$,TB&,TBS&
Declare Rebar&,RebarBandInfo#
Dll& = UseDll("XFrame.dll")
Windowstyle 20
windowtitle "OwnerDraw-Frame"
cls $FFFFD7
'Set("Errorlevel",-1)
'External("UxTheme.dll","SetWindowTheme",%hwnd,0)
'Set("Errorlevel",0)
Usermessages ~wm_close
UseIcon "Eis"
Ende& = 0
'#################
'DLL vorbereiten
'#################
SetButtonIndent(2)
SetTextIndent(4)
SetProgIcon(0)
SetOnTop(%hwnd,1)
SetButtons(0,0)
AdjustWindow(80,16,18,$FFFF)
SetOnlycaption(0)
SetAddImage(0)
Var T$ = "durchsichtiges Menü mit Rebarcontrol"
SetAddText(Addr(T$),Create("FONT","ARIAL",24,0,1,0,0),$FFFF,~DT_RIGHT)
SetButtonImages(Create("hPic",-1,GetDir$("@")+"\\Pics\\Allbuttons6.bmp"))
SetBackGroundImage(Create("hPic",-1,GetDir$("@")+"\\Pics\\BackGround3.bmp"))
SetLogoImage(Create("hPic",-1,GetDir$("@")+"\\Pics\\xprofande.bmp"),~DT_LEFT)
'#################
'#################
'Dll initialisieren
'#################
Init(%hwnd)
UpdateFrame(%hwnd)
'#################
'Menu aus Toolbar
'#################
TB_ButtonStrings$ = "Datei\zBerarbeiten\zHilfe\z\z"
TB& = Create("Toolbar",%hwnd,-1,-1,-1,-1,1)
Set("Errorlevel",-1)
External("UxTheme.dll","SetWindowTheme",TB&,0)
Set("Errorlevel",0)
Var MenuFont& = Create("FONT","Arial",18,0,0,0,0)
SendMessage(TB&,~WM_SETFONT,MenuFont&,1)
SendMessage(tb&,$400+28,0,Addr(TB_ButtonStrings$))
tbs& = SendMessage(tb&,$400+57,0,0)'Style holen
tbs& = tbs& | $1000 | $800 | $100 | $10 ' Style ändern
SendMessage(TB&,($400+56),0,tbs&)'Style setzen
SendMessage(TB&,($400+32),0,Makelong(0,0))'Icon-Grösse = 0,0
'Buttonstil setzen, kein Icon,Stil
Declare TBB#
Dim TBB#,TBBUTTON
TBB#.iBitmap& = -1
Byte TBB#,8 = 4 , $800 | $40 | $10
'Button 1 , CommandID , Text-Index
TBB#.idCommand& = -3000
TBB#.iString& = 0
SendMessage(tb&,($400+21),-1,TBB#)
'Button 2 , CommandID , Text-Index
TBB#.idCommand& = -3001
TBB#.iString& = 1
SendMessage(tb&,($400+21),-1,TBB#)
'Button 3 , CommandID , Text-Index
TBB#.idCommand& = -3002
TBB#.iString& = 2
SendMessage(tb&,($400+21),-1,TBB#)
Dispose TBB#
'#################
'########################
'ReBar-Control anlegen
'########################
ReBar& = Control("ReBarWindow32","",$50000040,0,0,0,0,%Hwnd,2000,%hinstance)
Set("Errorlevel",-1)
External("UxTheme.dll","SetWindowTheme",ReBar&,0)
Set("Errorlevel",0)
Dim RebarBandInfo#,80
Long RebarBandInfo#,0=80 'UINT cbSize
Long RebarBandInfo#,4=$000008B3'UINT fMask;
Long RebarBandInfo#,8=$00000100'UINT fStyle;
Long RebarBandInfo#,32=TB& 'HWND hwndChild;
Var rr# = New(Rect)
Sendmessage(TB&,$041D,1,rr#)'Buttonhöhe holen
Var h% = rr#.Bottom&'Buttonhoehe
Dispose rr#
Long RebarBandInfo#,40=h% 'UINT cyMinChild;
Var BackPic& = Create("hPic",-1,GetDir$("@")+"\\Pics\\BackGround3.bmp")
Long RebarBandInfo#,48=BackPic&'hBitmap hbmBack
sendmessage(TB&,$0438,0,$5000896D)'Toolbarstyle setzen
Sendmessage (ReBar&,$0401,-1,RebarBandInfo#)'Toolbar in ReBar
SetWindowPos ReBar& = 0,0- width(%hwnd),0
'########################
SetToolbarAutosize(TB&)
Set("MenuBackCol",$FFFFFF)
Set("MenuBorderCol",$FFFFFF)
SubClass %HWnd, 1
Var r1# = New(Rect)
whilenot ende&
Waitinput
If %Umessage = ~wm_close
exit()
Dispose r1#
Dispose RebarBandInfo#
DeleteObject BackPic&
DeleteObject MenuFont&
FreeDll Dll&
Ende& = 1
Endif
If MenuItem(3000)
CreateMenu
AppendMenu 100,"&Laden",0
AppendMenu 101,"&Speichern",0
AppendMenu 102,"Speichern &als",0
'Rechteck des Buttons holen
SendMessage(tb&,$400+29,0,r1#)
TrackMenu r1#.left&,Height(TB&)
Elseif Menuitem(3001)
CreateMenu
AppendMenu 100,"&Kopieren",0
AppendMenu 101,"&Ausschneiden",0
AppendMenu 102,"&Einfügen",0
SendMessage(tb&,$400+29,1,r1#)
TrackMenu r1#.left&,Height(TB&)
Elseif Menuitem(3002)
CreateMenu
AppendMenu 100,"&Hilfe",0
SendMessage(tb&,$400+29,2,r1#)
TrackMenu r1#.left&,Height(TB&)
Case MenuItem(100) : Messagebox("Hilfe gibt es hier nicht","...",0)
Endif
EndWhile
SubClassProc
If SubClassMessage(%hWnd, ~wm_size)
SetWindowPos ReBar& = 0,0- width(%hwnd),0
Set("WinProc", 0)
Elseif SubClassMessage(%hWnd, ~wm_activate)
select loword(&sWparam)
Caseof ~WA_ACTIVE,~WA_CLICKACTIVE
'ReBar neuzeichnen
Setwindowpos ReBar& = 0,0-Width(%hwnd),0
Caseof ~WA_INACTIVE
'Hintergrundbild laden
Var BackPic1& = Create("hPic",-1,GetDir$("@")+"\\Pics\\BackGround3.bmp")
'Pinsel erzeugen aus Hintergrundbild
Var Brush1& = ~CreatePatternbrush(BackPic1&)
'Temp-Bild anlegen
Var BackPic2& = Create("hNewPic",Width(%hwnd),Height(ReBar&),0)
Startpaint Backpic2&
'Pinsel ins Tem-Bild
~SelectObject(%hdc,Brush1&)
'Muster erzeugen
~PatBlt(%hdc,0,0,%bmpx,%bmpy,~PATCOPY)
'Inhalt vom ReBar einfügen
~BitBlt(%hdc,0,0,width(Rebar&),height(ReBar),~GetDC(ReBar&),0,0,~srccopy)
EndPaint
'%hdc wird fürs Eingrauen vorbereitet
Var sDC& = %hdc
Var CA# = New(COLORADJUSTMENT)
~GetColorAdjustment(sDC&,CA#)
~SetStretchBltMode(sDC&,4)
CA#.caColorfulness% = -100
CA#.caBrightness% = 10
~SetColorAdjustment(sDC&,CA#)
'Vom Temp_Bild in %hdc
StartPaint BackPic2&
~StretchBlt(sDC&,0,0,Width(%hwnd),Height(ReBar&),%hdc,0,0,Width(%hwnd),Height(ReBar&),~SRCCOPY)
EndPaint
'Speicher freigeben
DeleteObject BackPic1&
DeleteObject BackPic2&
DeleteObject Brush1&
Dispose CA#
Set("WinProc", 0)
endselect
EndIf
EndProc
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#15 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Ah, das krieg ich hin. DANKE!
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|