Foro | | | | Paul Glatz | ¡Hola,
mann de hecho puede con el API SetMenuItemBitmaps una AppendMenu una Icon zuweisen. Geht el auch con SubPopUps?? |
| | | | |
| | | Yo glaube nein*! (Yo auch todavía no gesehen)
*) salvo (natürlich) por Ownerdraw, hier kann Andreas Miethe tal vez helfen. |
| | | | |
| | Paul Glatz | | | | | |
| | | | | | | |
| | Paul Glatz |
| | | | |
| | | SubPopups, sí - qué se Yo sagen - va. |
| | | | |
| | Paul Glatz | Das lo irgentwie va weiß Yo auch sólo como?? |
| | | | |
| | Andreas Miethe
| Paul Glatz
Das lo irgentwie va weiß Yo auch sólo como??
Es por Ownerdraw. Como una SubPopUp kein Handle zurückgibt allerdings sólo en Position.
Mit SetMenuItemBitmaps() debería lo auch por Position trabajo ! Gerade getestet, va.
Ejemplo con SetMenuItemBitmaps ( Yo dafür Rolands Ejemplo benutzt ) KompilierenMarcaSeparación $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 )
End
Ejemplo Ownerdraw : KompilierenMarcaSeparaciónEncabezamiento-Archivos
$H windows.ph
$H messages.ph
Estructuras
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&
Declarar Ende&,Brush&,MenuPic&,PicWidth&,PicHeight&
Declarar Rect1#,hIcon1&,lpmis#,Size#
Declarar ReadItem#,lpdis#,ItemInfo#
Dim lpmis#,MEASUREITEMSTRUCT
Dim lpdis#,DRAWITEMSTRUCT
Dim Size#,SIZE
Dim Rect1#,RECT
Var i& = Importdll(Msimg32.dll,)
Menu-Ancho de imagen festlegen ( Farbverlauf )
PicWidth& = 20
Declarar MyItem#[5]reicht para 3 Menü-Einträge
El Struktur nimmt el Zeiger para el Texto y el Icon en
Struct Item = Eintrag&,Icon&
Dim MyItem#[],Item
Dim ReadItem#,Item se benötigt en el Informationen auszulesen
Estructuras füllen
Var Texto$ = Info
Var Texto2$ = Beenden
Var TextSep$ = -
Var Sub$ = Schriftschnitte
Var f$ = fett
Var k$ = kursiv
MyItem#[0].Eintrag& = Addr(Texto$)
MyItem#[1].Eintrag& = Addr(Texto2$)
MyItem#[0].Icon& = ~LoadIcon(%hInstance,A)
MyItem#[1].Icon& = ~LoadIcon(%hInstance,Eimer)
MyItem#[2].Eintrag& = Addr(TextSep$)
MyItem#[2].Icon& = 0
MyItem#[3].Eintrag& = Addr(Sub$)
MyItem#[3].Icon& = ~LoadIcon(%hInstance,Drucker)
MyItem#[4].Eintrag& = Addr(f$)
MyItem#[4].Icon& = ~LoadIcon(%hInstance,Eis)
MyItem#[5].Eintrag& = Addr(k$)
MyItem#[5].Icon& = ~LoadIcon(%hInstance,Gesicht)
Proc Menue
Ownerdraw-Menü invertir y Mostrar
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 por position y no por Command determinado voluntad
Das Zählen fängt en Null a
~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, Beenden
~ModifyMenu(&hMenu,103,~MF_BYCOMMAND | ~MF_OWNERDRAW,103,MyItem#[1])
Volver @TrackMenu()
ENDPROC
Windowstyle 26 + 512
Título de la ventana Test
Ventana 0,0-640,480
GradientRect(%hdc2,0,0,Width(%hwnd),Height(%hwnd),$FFFFFF,$FFC1C1,0)
Repaint
SubClass %HWnd, 1
Sinestar encargado Ende&
Waitinput
If %MousePressed = 2Rechter Mausbutton gedrückt
Menue()
If (%MenuItem = 101)
@Messagebox(Programmiert en XProfan 11,Referencia,64)
ElseIf (%MenuItem = 103)
Ende&=1
EndIf
Endif
Endwhile
Disponer lpmis#,Size#,lpdis#,Rect1#
End
SubClassProc
If SubClassMessage(%hWnd,~WM_MEASUREITEM)
lpmis# = &slParam
ReadItem# = lpmis#.itemData&
Texbreite para Item ermitteln, muss übergeben voluntad !!
~GetTextExtentPoint32(%hdc,ReadItem#.Eintrag&,Len(String$(ReadItem#.Eintrag&,0)),Size#)
lpmis#.itemWidth& = Size#.cx& + PicWidth&
If String$(ReadItem#.Eintrag&,0) = -Separador behandeln
lpmis#.itemHeight& = -2
Endif
lpmis#.itemHeight& = lpmis#.itemHeight& + 6
PicHeight& = PicHeight& + lpmis#.itemHeight&
Conjunto(WinProc, 0)
ElseIf SubClassMessage(%hWnd,~WM_DRAWITEM)
lpdis# = &slParam
If lpdis#.CtlType& = ~ODT_MENU sólo si Menu
ReadItem# = lpdis#.itemData&
If String$(ReadItem#.Eintrag&,0) <> -fass kein Separador
IF lpdis#.itemState& & ~ODS_SELECTED si selektiert
~SetTextColor(lpdis#.hDC&,$FFFFFF)
~SetBkColor(lpdis#.hDC&,$FFC1C1)
Más si no selektiert
~SetTextColor(lpdis#.hDC&,0)
~SetBkColor(lpdis#.hDC&,$FFFFFF)
EndIf
Endif
Edición
If String$(ReadItem#.Eintrag&,0) <> - si kein Separador
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)
Más si Separador
GradientRect(lpdis#.hDC&,0,lpdis#.rcItem!Top&,PicWidth&,lpdis#.rcItem!Bottom&,$FFFFFF,$FFC1C1,0)
~Rectángulo(lpdis#.hDC&,0,lpdis#.rcItem!Top&+1,lpdis#.rcItem!Right&,lpdis#.rcItem!Bottom&-2)
Endif
Conjunto(WinProc, 0)
Endif
EndIf
ENDPROC
Proc GradientRect
Parámetros DC&,x%,y%,w%,h%,Color1&,Color2&,HV&
Declarar GradRect#,Trivertex#
Dim GradRect#,8
Dim Trivertex#,32
Largo Gradrect#,0 = 0
Largo Gradrect#,4 = 1
Largo Trivertex#,0=x%
Largo 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
Largo Trivertex#,16=w%
Largo 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&)
Disponer Trivertex#
Disponer 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 | Gracias Yo lo con SetMenuItemBitmaps gemacht klappt supper! |
| | | | |
| | | @Paul: Vlt. könntest Usted diesmal entsprechendes Codesnippet einsortieren, siehst sí el lo fehlt. |
| | | | |
| | Paul Glatz | Posesiones grade todavía una Problema.
¿Cómo se puede Yo el SetMenuItemBitmaps-Variante en SubPopUps en SubPopUps anwenden |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 4 subscriber: |