Forum | | | | Paul Glatz | Salut,
homme peux oui avec qui API SetMenuItemBitmaps une AppendMenu un Icon zuweisen. allez cela aussi avec SubPopUps?? |
| | | | |
| | | je crois non*! (habe je aussi encore pas gesehen)
*) ausgenommen (naturellement) per Ownerdraw, ici peux Andreas Miethe peut-être aider. |
| | | | |
| | Paul Glatz | | | | | |
| | | | | | | |
| | Paul Glatz |
| | | | |
| | | SubPopups, oui - quoi soll je dire - allez. |
| | | | |
| | Paul Glatz | cela es irgentwie allez sais je aussi seulement comment?? |
| | | | |
| | Andreas Miethe
| Paul Glatz
cela es irgentwie allez sais je aussi seulement comment??
cela allez per Ownerdraw. là un SubPopUp ne...aucune Handle zurückgibt allerdings seulement sur qui Position.
avec SetMenuItemBitmaps() sollte es aussi per Position marcher ! justement getestet, allez.
Beispiel avec SetMenuItemBitmaps ( j'ai pour Rolands Beispiel benutzt ) KompilierenMarqueSéparation $H windows.ph
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
SubPopup Test
SetMenuItemBitmaps(&hMenu,1,$400,hbmChecked&,hbmUnChecked&)Menu-Grafik ändern...
##### NEU ####
SubPopup Test1 SubPopUp in SubPopUp
SetMenuItemBitmaps(~GetSubMenu(&hMenu,1),0,$400,hbmChecked&,hbmUnChecked&)Menu-Grafik ändern...
AppendMenu 202, &test1
Endsub
##########
AppendMenu 202, &test2
Endsub
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) = $203Doppelklick links
Ende%=1
Elseif @TrayIcon(Msg, 1) = $204Rechter 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, class=s2>1 )
Fin
Beispiel Ownerdraw : KompilierenMarqueSéparationEn-tête-Fichiers
$H windows.ph
$H messages.ph
Strukturen
Struct SIZE = cx&,cy&
Struct RECT = Left&,Top&,Right&,Bottom&
Struct MEASUREITEMSTRUCT = CtlType&,CtlID&,itemID&,itemWidth&,itemHeight&,itemData&
Struct DRAWITEMSTRUCT = CtlType&,CtlID&,itemID&,itemAction&,itemState&,hwndItem&,hDC&,rcItem!RECT,itemData&
Déclarer Ende&,Brush&,MenuPic&,PicWidth&,PicHeight&
Déclarer Rect1#,hIcon1&,lpmis#,Size#
Déclarer ReadItem#,lpdis#,ItemInfo#
Faible lpmis#,MEASUREITEMSTRUCT
Faible lpdis#,DRAWITEMSTRUCT
Faible Size#,SIZE
Faible Rect1#,RECT
Var i& = Importdll(Msimg32.dll,)
Menu-Bildbreite festlegen ( Farbverlauf )
PicWidth& = 20
Déclarer MyItem#[5]reicht pour 3 menu-Einträge
qui Struktur nimmt qui aiguille pour den Text et cela Icon sur
Struct Item = Eintrag&,Icon&
Faible MyItem#[],Item
Faible ReadItem#,Item wird nécessaire um qui Informationen auszulesen
Strukturen füllen
Var Text$ = Info
Var Text2$ = finissons
Var TextSep$ = -
Var Sous$ = Schriftschnitte
Var f$ = fett
Var k$ = kursiv
MyItem#[0].Eintrag& = Addr(Text$)
MyItem#[1].Eintrag& = Addr(Text2$)
MyItem#[0].Icon& = ~LoadIcon(%hInstance,A)
MyItem#[1].Icon& = ~LoadIcon(%hInstance,seau)
MyItem#[2].Eintrag& = Addr(TextSep$)
MyItem#[2].Icon& = 0
MyItem#[3].Eintrag& = Addr(Sous$)
MyItem#[3].Icon& = ~LoadIcon(%hInstance,Drucker)
MyItem#[4].Eintrag& = Addr(f$)
MyItem#[4].Icon& = ~LoadIcon(%hInstance,glace)
MyItem#[5].Eintrag& = Addr(k$)
MyItem#[5].Icon& = ~LoadIcon(%hInstance,Gesicht)
Proc Menue
Ownerdraw-menu anlegen et Montrer
CreateMenu
AppendMenu 101, Info0
~ModifyMenu(&hMenu,101,~MF_BYCOMMAND | ~MF_OWNERDRAW,101,MyItem#[0])
AppendMenu 102, -1
~ModifyMenu(&hMenu,102,~MF_BYCOMMAND | ~MF_OWNERDRAW,102,MyItem#[2])
SubPopUp Schriftschnitte 2 ModifyMenu muss per position et pas per Command bestimmt volonté
cela Zählen commence chez zéro à
~ModifyMenu(&hMenu,2,~MF_BYPOSITION | ~MF_OWNERDRAW,2,MyItem#[3])
AppendMenu 214,fett
AppendMenu 215,kursiv
~ModifyMenu(&hMenu,214,~MF_BYCOMMAND | ~MF_OWNERDRAW,214,MyItem#[4])
~ModifyMenu(&hMenu,215,~MF_BYCOMMAND | ~MF_OWNERDRAW,215,MyItem#[5])
EndSub
AppendMenu 103, finissons
~ModifyMenu(&hMenu,103,~MF_BYCOMMAND | ~MF_OWNERDRAW,103,MyItem#[1])
Retour @TrackMenu()
ENDPROC
Windowstyle 26 + 512
Titre de la fenêtre Test
Fenêtre 0,0-640,480
GradientRect(%hdc2,0,0,Width(%hwnd),Height(%hwnd),$FFFFFF,$FFC1C1,0)
Repaint
SubClass %HWnd, 1
Whilenot Ende&
Waitinput
Si %MousePressed = 2Rechter Mausbutton gedrückt
Menue()
Si (%MenuItem = 101)
@Messagebox(Programmiert dans XProfan 11,Hinweis,64)
ElseIf (%MenuItem = 103)
Ende&=1
EndIf
Endif
Endwhile
Dispose lpmis#,Size#,lpdis#,Rect1#
Fin
SubClassProc
Si SubClassMessage(%hWnd,~WM_MEASUREITEM)
lpmis# = &slParam
ReadItem# = lpmis#.itemData&
Texbreite pour Item ermitteln, muss übergeben volonté !!
~GetTextExtentPoint32(%hdc,ReadItem#.Eintrag&,Len(String$(ReadItem#.Eintrag&,0)),Size#)
lpmis#.itemWidth& = Size#.cx& + PicWidth&
Si String$(ReadItem#.Eintrag&,0) = -Séparateur behandeln
lpmis#.itemHeight& = -2
Endif
lpmis#.itemHeight& = lpmis#.itemHeight& + 6
PicHeight& = PicHeight& + lpmis#.itemHeight&
Set(WinProc, 0)
ElseIf SubClassMessage(%hWnd,~WM_DRAWITEM)
lpdis# = &slParam
Si lpdis#.CtlType& = ~ODT_MENU seulement si Menu
ReadItem# = lpdis#.itemData&
Si String$(ReadItem#.Eintrag&,0) <> -fass ne...aucune Séparateur
IF lpdis#.itemState& & ~ODS_SELECTED si selektiert
~SetTextColor(lpdis#.hDC&,$FFFFFF)
~SetBkColor(lpdis#.hDC&,$FFC1C1)
D'autre si pas selektiert
~SetTextColor(lpdis#.hDC&,0)
~SetBkColor(lpdis#.hDC&,$FFFFFF)
EndIf
Endif
Ausgabe
Si String$(ReadItem#.Eintrag&,0) <> - si ne...aucune Séparateur
lpdis#.rcItem!Left& = lpdis#.rcItem!Left& + PicWidth&
~ExtTextOut(lpdis#.hDC&,lpdis#.rcItem!Left&+10,lpdis#.rcItem!Top&+4,~ETO_OPAQUE,lpdis#.rcItem,ReadItem#.Eintrag&,Len(String$(ReadItem#.Eintrag&,0)) ,0)
GradientRect(lpdis#.hDC&,0,lpdis#.rcItem!Top&,PicWidth&,lpdis#.rcItem!Bottom&,$FFFFFF,$FFC1C1,0)
~DrawIconEx(lpdis#.hDC&,2,lpdis#.rcItem!Top&+4,ReadItem#.Icon&,13,13,0,0,~DI_NORMAL)
D'autre si Séparateur
GradientRect(lpdis#.hDC&,0,lpdis#.rcItem!Top&,PicWidth&,lpdis#.rcItem!Bottom&,$FFFFFF,$FFC1C1,0)
~Rectangle(lpdis#.hDC&,0,lpdis#.rcItem!Top&+1,lpdis#.rcItem!Right&,lpdis#.rcItem!Bottom&-2)
Endif
Set(WinProc, 0)
Endif
EndIf
ENDPROC
Proc GradientRect
Paramètres DC&,x%,y%,w%,h%,Color1&,Color2&,HV&
Déclarer GradRect#,Trivertex#
Faible GradRect#,8
Faible Trivertex#,32
Long Gradrect#,0 = 0
Long Gradrect#,4 = 1
Long Trivertex#,0=x%
Long Trivertex#,4=y%
word Trivertex#,8=GETRVALUE(Color1&) << 8
word Trivertex#,10=GETGVALUE(Color1&) << 8
word Trivertex#,12=GETBVALUE(Color1&) << 8
word Trivertex#,14=0
Long Trivertex#,16=w%
Long Trivertex#,20=h%
word Trivertex#,24=GETRVALUE(Color2&) << 8
word Trivertex#,26=GETGVALUE(Color2&) << 8
word Trivertex#,28=GETBVALUE(Color2&) << 8
word Trivertex#,30=0
GradientFill(DC&,Trivertex#,2,Gradrect#,1,HV&)
Dispose Trivertex#
Dispose Gradrect#
ENDPROC
|
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 20.02.2009 ▲ |
| |
| | | | | | | |
| | Paul Glatz | merci j'ai es avec SetMenuItemBitmaps gemacht klappt supper! |
| | | | |
| | | @Paul: Vlt. könntest Du diesmal entsprechendes Codesnippet einsortieren, vois oui cela es fehlt. |
| | | | |
| | Paul Glatz | Habe grade encore un Problem.
comment peux je qui SetMenuItemBitmaps-variante sur SubPopUps dans SubPopUps anwenden |
| | | | |
|
répondreOptions du sujet | 3.600 Views |
Themeninformationencet Thema hat 4 participant: |
|