![]() |
Anzeige:
|
|
|||||||
| Helfer & Tools Programme für und in XProfan und Fragen dazu. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.877
|
Wer von den XProfanern kann mir ein Codeschnipsel überlassen, mit dem ich Programmicons in ein Trackmenu zeichnen kann? - Das Tool QUICKSTART von mir erzeugt im Hauptfenster nach der Auswahl eines Programmes immer das Programm-Icon. Das hätte ich gerne auch im Trackmenu.
Also nicht schüchtern sein, sondern dem "alten Mann" Horst helfen ! PS: QUICKSTART steht auf meiner HP zum Download bereit
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Soweit ich weiss, erwarten Menüs ein Bitmaphandle. Iconhandles werden IMHO nicht unterstützt.
Du kannst natürlich Icons in Bitmaps umwandeln und dann mit SetMenuItemBitmaps für einen Menüeintrag einblenden. Oder du zeichnest Menüs sofort ownerdrawn. Mein Tool Hardcopy z.B. nutzt eine tolle Assembler-Library dafür. Wenn ich mal wieder Zeit und Lust habe, könnte ich einige Dll-Funktionen mithilfe der Library in eine Dll bündeln. Dann kann sie auch direkt mit XProfan benutzt werden, ohne XPIA verwenden zu müssen.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#3 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.877
|
@Frank
Du kennst mich doch Die einzige DLL, die ich akzeptiere ist die LISTVIEW.DLL - Ansonsten will ich doch alles mit XProfan-Mitteln machen
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Das geht per API. Das Beispiel macht das mit dem normalen Menü; für das Trackmenu musst du nochmal im MSDN nachschlagen (der generelle Aufruf sollte aber gleich sein).
Das Beispiel stammt von Sebastian König.
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#5 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Jac, er möchte Icons als Menubilder, keine Bitmaps. Direkt Icons einsetzen geht meine ich nicht.
Aber man kann Icons einladen, bzw. kopieren und als Bitmaphandle an die API übergeben. Notfalls über die Speicherbitmap, eleganter aber über einen DC.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Icon oder Bitmap ist doch Wurscht. Da muss er's halt als Bitmap beilegen.
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#7 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.877
|
@Jac
Ist eben nicht "wurscht" ! - Im Tool 'QUICKSTART' werden frei zu wählende Programme auf einem Hauptfenster mit ihrem Icon angezeigt und können von da auch gestartet werden. Ähnlich den Icon auf dem Desctop - Dieses Fenster kann zum Trayicon minimiert werden und mit der rechten Mausraste werden hier ebenfalls die gewählten Programme gezeigt und mit der linken Taste gestartet. Soweit ist alles im "grünen Bereich" und steht zum Download bereit. In einer moderneren Version möchte ich aber, dass die Programme im Trackmenu des Trayicon ebenfalls als Icon erscheinen und zwar im Format 16x16 - "Capiste" ? PS: Lade Dir doch das Tool runter und starte es. Dann siehst Du, was ich meine
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de Geändert von horsthorn (12.02.2009 um 03:30 Uhr) |
|
|
|
|
|
#8 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Hallo,
was Dir noch fehlt, ist eine Routine um aus einem IconHandle eine Bitmap zu machen: Code:
Proc Ico2Bmp
Parameters Icon&
' Weiße Bitmap in Größe 32 * 32 erzeugen
Var IBmp& = Create("hNewPic", 32, 32, RGB(255,255,255))
' Auf diese Bitmap das Icon zeichnen
StartPaint IBmp&
DrawIcon Icon&, 0, 0
EndPaint
Return IBmp&
EndProc
Code:
Proc Ico2SizedBmp
Parameters Icon&, dx&, dy&
' Weiße temporäre Bitmap in Größe 32 * 32 erzeugen
Var TempBmp& = Create("hNewPic", 32, 32, RGB(255,255,255))
' Auf diese Bitmap das Icon zeichnen
StartPaint TempBmp&
DrawIcon Icon&, 0, 0
EndPaint
' Weiße Bitmap in Größe dx& * dy& erzeugen
Var IBmp& = Create("hNewPic", dx&, dy&, RGB(255,255,255))
' Auf diese Bitmap die temporäre Bitmap verkleinert zeichnen
StartPaint IBmp&
DrawSizedPic TempBmp&, 0, 0 - dx&, dy&; 0
EndPaint
' Temporäre Bitmap löschen
DeleteObject TempBmp&
Return IBmp&
EndProc
Roland Geändert von RGH (12.02.2009 um 09:29 Uhr) Grund: Korrektur |
|
|
|
|
|
#9 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Und hier für alle Mitleser, die wissen wollen, wie man überhaupt Anwendungen für den Systemtray von Windows in XProfan programmiert, ein komplettes Beispiellisting mit TrayIcon-Menü und Bildern in demselben:
Code:
Declare Hicon&,Ende%,Show%
Declare Checkmerker%,Menuhandle&
Declare hbmChecked&,hbmUnchecked&
DEF SetMenuItemBitmaps(5) !"USER32","SetMenuItemBitmaps"
Proc Ico2SizedBmp
Parameters Icon&, dx&, dy&
' Weiße temporäre Bitmap in Größe 32 * 32 erzeugen
Var TempBmp& = Create("hNewPic", 32, 32, RGB(255,255,255))
' Auf diese Bitmap das Icon zeichnen
StartPaint TempBmp&
DrawIcon Icon&, 0, 0
EndPaint
' Weiße Bitmap in Größe dx& * dy& erzeugen
Var IBmp& = Create("hNewPic", dx&, dy&, RGB(255,255,255))
' Auf diese Bitmap die temporäre Bitmap verkleinert zeichnen
StartPaint IBmp&
DrawSizedPic TempBmp&, 0, 0 - dx&, dy&; 0
EndPaint
DeleteObject TempBmp&
Return IBmp&
EndProc
Proc Menue
CreateMenu
AppendMenu 101, "&Info"
AppendMenu 102, "&deaktiviert"
SetMenuItemBitmaps(&hMenu,102,$10,hbmChecked&,hbmUnChecked&) 'Menu-Grafik ändern...
AppendMenu 106, "Hauptfenster &sichtbar"
SetMenuItemBitmaps(&hMenu,106,$10,hbmChecked&,hbmUnChecked&) 'Menu-Grafik ändern...
AppendMenu 104, "-"
AppendMenu 103, "&Beenden"
CheckMenu 106, Show%
CheckMenu 102, Checkmerker%
Return @TrackMenu()
EndProc
Windowstyle 26 + 512
WindowTitle "TrayIcon_Test"
Window 0,0-640,480
@ShowWindow(%hWnd,0)
Hicon& = @create("hIcon","Profan")
hbmChecked& = Ico2SizedBmp(@create("hIcon", "A"),13,13)
hbmUnChecked& = Ico2SizedBmp(@create("hIcon", "Baum"),13,13)
@TrayIcon("Add", %hWnd, 1, hIcon&, "TrayIcon 11")
Whilenot Ende%
Waitinput
If @TrayIcon("Msg", 1) = $203 'Doppelklick links
Ende%=1
Elseif @TrayIcon("Msg", 1) = $204 'Rechter Mausbutton gedrückt
@SetActiveWindow(%hWnd)
Menue()
If (%MenuItem = 102)
Checkmerker% = @Not(Checkmerker%) 'Zustandsänderung merken...
If Checkmerker% = 0
Hicon& = @create("hIcon", "A")
@TrayIcon("SetIcon", %hWnd, 1, hIcon&)
Else
Hicon& = @create("hIcon", "Baum")
@TrayIcon("SetIcon", %hWnd, 1, hIcon&)
EndIf
Setmenuitem 0
ElseIf (%MenuItem = 101)
@Messagebox("Programmiert in XProfan 11","Hinweis",64)
Setmenuitem 0
ElseIf (%MenuItem = 103)
Ende%=1
ElseIf (%MenuItem = 106)
Show% = @Not(Show%)
@Showwindow(%hWnd,Show%)
Setmenuitem 0
EndIf
Endif
Endwhile
@TrayIcon("Delete", %hWnd, 1)
End
Roland |
|
|
|
|
|
#10 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.877
|
@RGH
Danke - das ist doch schon mal ein Anfang
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
#11 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 11.02.2009
Ort: Niedersachsen
Alter: 46
Beiträge: 23
|
Wo wir mal wieder beim Thema wären:
Bei dieser Lösung invertieren die kleinen BMP Bildchen. Und es wäre sehr schön wenn in XProfan12 sowas schon eingebaut wäre. Gruß |
|
|
|
|
|
#12 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Ha! Eine XProfaner-Seite, die ich bislang noch gar nicht kannte... hello Mr. Paradox.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#13 (Direktlink) | ||
|
Erfolgreich angemeldet
![]() Registriert seit: 13.02.2009
Beiträge: 19
|
Hallo erstmal
Zitat:
Code:
window 1,1-400,400
$H Messages.ph
$H Windows.ph
usermessages 16
proc MenuProc'-----------------------------------------------MenuProc
parameters wnd&,msg&,wparam&,lparam&
if msg&=~WM_MEASUREITEM
Mes#=lparam&
Mes#.CtlType&=~ODT_MENU
Mes#.itemWidth&=150'----Gesamtbreite
Mes#.itemHeight&=18'----Höhe
elseif msg&=~WM_DRAWITEM
Draw#=lparam&
with Draw#
if .itemState& & ~ODS_SELECTED
~SetTextColor(.hDC&,~GetSysColor(~COLOR_HIGHLIGHTTEXT))
~SetBkColor(.hDC&,~GetSysColor(~COLOR_HIGHLIGHT))
else
~SetTextColor(.hDC&,~GetSysColor(~COLOR_MENUTEXT))
~SetBkColor(.hDC&,~GetSysColor(~COLOR_MENU))
endif
var Text$=Text$[.itemData&]
var Icon&=Icon&[.itemData&]
~ExtTextOut(.hDC&,.x1&+20,.y1&,~ETO_OPAQUE,Draw#+28,addr(Text$),len(Text$),0)
~DrawIconEx(.hDC&,0,.y1&,Icon&,16,16,0,0,~DI_NORMAL)
endwith
endif
return ~CallWindowProc(WndProcOld&,wnd&,msg&,wparam&,lparam&)
endproc'-------------------------------------------------------------
proc AppendOwnerDrawMenu'-------------------------AppendOwnerDrawMenu
parameters Menu&,ID%
clear Menu#
Menu#.cbSize&=44
Menu#.fType&=~MFT_OWNERDRAW
Menu#.dwItemData&=ID%
Menu#.fMask&=~MIIM_TYPE | ~MIIM_ID | ~MIIM_DATA
Menu#.wID&=ID%
~InsertMenuItem(Menu&,99,0,Menu#)
endproc'-------------------------------------------------------------
proc PopupOwnerDrawMenu'---------------------------PopupOwnerDrawMenu
parameters Menu&,dlg&,x%,y%
long Pos#,0=x%
long Pos#,4=y%
~ClientToScreen(dlg&,Pos#)
set("Fastmode",1)
~SetWindowLong(%hwnd,~GWL_WNDPROC,WndProcNew&)
~TrackPopupMenu(Menu&,0,long(Pos#,0),long(Pos#,4),0,%hwnd,0)
~SetWindowLong(%hwnd,~GWL_WNDPROC,WndProcOld&)
set("Fastmode",0)
endproc'-------------------------------------------------------------
proc InitOwnerDrawMenu'-----------------------------InitOwnerDrawMenu
struct Mes=CtlType&,CtlID&,itemID&,itemWidth&,itemHeight&,itemData&
dim Mes#,Mes'--MEASUREITEMSTRUCT
struct Draw=CtlType&,CtlID&,itemID&,itemAction&,itemState&,hwndItem&,hDC&,\
x1&,y1&,x2&,y2&,itemData&
dim Draw#,Draw'--DRAWITEMSTRUCT
struct Menu=cbSize&,fMask&,fType&,fState&,wID&,hSubMenu&,hbmpChecked&,hbmpUnchecked&,\
dwItemData&,dwTypeData&,cch&,Text$(100)
dim Menu#,Menu'--MENUINFO
dim Pos#,8
WndProcOld&=~GetWindowLong(%hwnd,~GWL_WNDPROC)
WndProcNew&=procaddr(MenuProc,4)
endproc'-------------------------------------------------------------
declare Mes#,Draw#,Menu#,Pos#,WndProcOld&,WndProcNew&
declare Text$[3],Icon&[3]
Text$[1]="Hallo Leute"
Text$[2]="Ein Eintrag"
Text$[3]="Noch'n Eintrag"
Icon&[1]=~LoadIcon(0,32513)
Icon&[2]=~LoadIcon(0,32514)
Icon&[3]=~LoadIcon(0,32515)
InitOwnerDrawMenu
var Menu&=~CreatePopupMenu()
AppendOwnerDrawMenu Menu&,1
AppendOwnerDrawMenu Menu&,2
AppendOwnerDrawMenu Menu&,3
while 1
waitinput
case %umessage=16:break
if %mousekey=2
PopupOwnerDrawMenu(Menu&,%hwnd,%mousex,%mousey)
print %menuitem
endif
endwhile
'---Hier bei Bedarf Bereiche und Icons freigeben
Allerdings noch für XProfan10 entwickelt, darum das "gefährliche" ProcAddr() (Sorry, iF Zitat:
So gesehen waren 90 % der Erweiterungen in Profan in den letzten Jahren eigentlich überflüssig SeeYou Pascal |
||
|
|
|
|
|
#14 (Direktlink) | |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Hi Pascal,
toll dich hier zu lesen! Zitat:
Ich glaube auch nicht, dass es die Aufgabe einer Programmsprache ist, für jedes Control eine Vereinfachung aller möglichen API/Messages anzubieten. Zugegebenermassen ist das aber sehr bequem...
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#15 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Zitat:
Aber du hast sicher recht: ein nicht unerheblicher Teil der Erweiterungen wenden sich an den Einsteiger oder Programmierer, der mit wenigen Zeilen möglichst viel erreichen will, und ermöglichen diesem Kreis mit wenig Aufwand Dinge zu programmieren, die der erfahrende API-Programmierer schon immer konnte, und sei es durch die Verwendung zusätzlicher DLLs! Zu den Menüs: Natürlich würde man ab XProfan 11 hier das deutlich sicherere Subclassing für Ownerdraw-Menüs benutzen. Oder man geht den Weg, den Norbert Strübli vor ca. 4 Jahren mit seiner XMenu.inc gegangen ist und schreibt sich die Windowsprozedur komplett selbst und verzichtet im Gegenzug auf viele XProfan-Annehmlichkeiten. Trotzdem könnte natürlich eine in XProfan direkt eingebaute Erweiterung die Geschichte erheblich vereinfachen, so dass man ganz ohne SubClassing (das für den Einsteiger auch einige Fallstricke bietet) oder ProcAddr (das für sowas eigentlich nicht gedacht ist) auskommen könnte. Tatsächlich bastele ich schon seit einer Weile an einer solchen Erweiterung, die z.B. bei den Menübefehlen einen zusätzlichen Parameter, nämlich ein Icon, erlaubt und möglicherweise über Set-Funktionen das Aussehen der Menüs steuert. Gruß Roland |
|
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Icon | Basti_1988 | Windows XP | 1 | 17.05.2007 19:38 |
| WinXP Papierkorb Icon :=> Größe ändern?! Vista Icon?! | NilsG | Windows XP | 0 | 05.09.2006 16:15 |
| Icon | Tintenkiller | Software - Allgemein | 2 | 20.07.2005 15:14 |
| Shell-Icon durch eigenes Icon ersetzen | Drago | Windows XP | 2 | 08.12.2003 11:42 |
| Icon | Sin | Windows XP | 1 | 25.06.2003 13:50 |