Bugs und vermeintliche | | | | Detlef Jagolski | Hallo Roland,
habe eine Dll für Owner Draw Menüs, unter XProfan 11 gab es keine Probleme. Mit XProfan 11.2 habe jetzt ein Anwendungsfehler. Hast Du ein Tipp für mich, wie ich das wieder hinbekomme das es wieder läuft?
Gruß Detlef KompilierenMarkierenSeparieren $P+
Set(ErrorLevel,0)
$H WINDOWS.PH
$H MESSAGES.PH
$H SHELLAPI.PH
$H STRUCTS.PH
$H COMMCTRL.PH
$I XPSTILDLL32.INC
Declare appexit%
Declare Edit1&
var hMenuFont1& = Create(FONT,Arial,14,0,0,0,0)
var hMenuFont2& = Create(FONT,Arial,14,0,0,1,0)
var hMenuFont3& = Create(FONT,Arial,16,0,1,1,0)
SubClassProc
If SubClassMessage(%hwnd, ~WM_MEASUREITEM)
MeasureItem (&sWnd, &sLParam)
Set(WinProc,1)
ElseIf SubClassMessage(%hwnd, ~WM_DRAWITEM)
DrawItem (&sLParam, hImageList1&, hImageList2&)
Set(WinProc,1)
ElseIf SubClassMessage(Edit1&, ~WM_CONTEXTMENU)
ConTextMenu (Edit1&, hConTextMenu&, LoWord(&sLParam), HiWord(&sLParam))
Set(WinProc, 0)
ElseIf SubClassMessage(Edit1&, ~WM_MEASUREITEM)
MeasureItem (Edit1&, &sLParam)
Set(WinProc, 0)
ElseIf SubClassMessage(Edit1&, ~WM_DRAWITEM)
DrawItem (&sLParam, hImageList1&, hImageList2&)
Set(WinProc, 0)
ElseIf SubClassMessage(Edit1&, ~WM_COMMAND)
WMCommand (Edit1&, &sWParam)
Set(WinProc, 0)
EndIf
EndProc
Proc CreateMainMenu
Popup &Datei
AppendMenu 1,&Neu... Strg+N
AppendMenu 2,&Öffnen... Strg+O
AppendMenu 3,S&chließen
Separator
AppendMenu 5,&Speichern Strg+S
AppendMenu 6,Speichern &unter...
Separator
AppendMenu 8,Seiten&ansicht
AppendMenu 9,&Drucken... Strg+P
Separator
AppendMenu 11,&Beenden
Popup &Bearbeiten
AppendMenu 12,A&usschneiden Strg+X
AppendMenu 13,&Kopieren Strg+C
AppendMenu 14,E&infügen Strg+V
Separator
AppendMenu 16,&Suchen... Strg+F
SubPopup &Gehe zu
AppendMenu 17,&Erster
AppendMenu 18,&Letzter
AppendMenu 19,&Nähster
AppendMenu 20,&Vorheriger
EndSub
EndProc
Set(TrueColor,1)
WindowStyle $003F
WindowTitle Menü
Window %maxX + 5,114 - 742,528
Cls ~GetSysColor(15)
CreateMainMenu
UseFont MS Sans Serif,13,0,0,0,0
SetDialogFont 1
var IconDll$ = XPStilDll32.Dll
var hImageList1& = CreateImageList(Addr(IconDll$))
var hImageList2& = CreateImageListGray(Addr(IconDll$))
SetCheckedImage(116)
SetMenuStandardColors()
SetMenuColors (RGB(230,0,0),RGB(100,0,0),RGB(10,100,20),RGB(255,253,191),RGB(230,0,0),RGB(255,208,251))
SetMenuBitmap (SP32.DLL, MICKI)
var hConTextMenu& = SetConTextMenuEdit(hMenuFont1&,-1,3,0,1,2,5,-1)
var hMenu& = ~GetMenu(%hwnd)
var hSubMenu& = ~GetSubMenu(hMenu&,0)
SetColorXPMenu hMenu&, RGB(187,212,247)
ChangeMenuItem (hSubMenu&,0,45,hMenuFont2&,RGB(230,0,0))
ChangeMenuItem (hSubMenu&,1,7,hMenuFont1&,RGB(230,0,0))
ChangeMenuItem (hSubMenu&,2,-1,hMenuFont2&,RGB(230,0,0))
ChangeMenuItem (hSubMenu&,3,-1,-1,-1)
ChangeMenuItem (hSubMenu&,4,16,hMenuFont3&,RGB(230,0,0))
ChangeMenuItem (hSubMenu&,5,-1,hMenuFont1&,RGB(70,75,210))
ChangeMenuItem (hSubMenu&,6,-1,-1,-1)
ChangeMenuItem (hSubMenu&,7,8,hMenuFont1&,RGB(70,75,210))
ChangeMenuItem (hSubMenu&,8,12,hMenuFont1&,RGB(70,75,210))
ChangeMenuItem (hSubMenu&,9,-1,-1,-1)
ChangeMenuItem (hSubMenu&,10,-1,hMenuFont1&,RGB(70,75,210))
hSubMenu& = ~GetSubMenu(hMenu&,1)
ChangeMenuItem (hSubMenu&,0,0,hMenuFont1&,RGB(70,75,210))
ChangeMenuItem (hSubMenu&,1,1,hMenuFont1&,RGB(70,75,210))
ChangeMenuItem (hSubMenu&,2,2,hMenuFont1&,RGB(70,75,210))
ChangeMenuItem (hSubMenu&,3,-1,-1,-1)
ChangeMenuItem (hSubMenu&,4,11,hMenuFont2&,RGB(0,53,99))
ChangeMenuItem (hSubMenu&,5,-1,hMenuFont1&,-1)
var hSubPopMenu& = ~GetSubMenu(hSubMenu&,5)
ChangeMenuItem (hSubPopMenu&,0,117,hMenuFont1&,-1)
ChangeMenuItem (hSubPopMenu&,1,119,hMenuFont1&,-1)
ChangeMenuItem (hSubPopMenu&,2,113,hMenuFont1&,-1)
ChangeMenuItem (hSubPopMenu&,3,114,hMenuFont1&,-1)
Edit1&=Create(Edit,%hwnd,,112,153,121,21)
Set(SubClassMode,1)
SubClass %hwnd,1
SubClass Edit1&,1
SetWindowPos %hwnd = 207,114 - 742,528;0
WhileNot appexit%
WaitInput
If %key = 2
appexit%=1
ElseIf Clicked(Edit1&)
ElseIf Clicked(ChoiceBox1&)
ElseIf %key = 4
Fenstergröße
ElseIf %key = 5
Hilfe
EndIf
Wend
SubClass %hwnd,0
SubClass Edit1&,0
|
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 06.04.2009 ▲ |
| |
| | RGH | Hallo,
zunächst bekomme ich bei Deinem Code den Fehler Definition im Header fehlt: MENUINFO. In welcher Headerdatei ist bei Dir diese Definition drin? (Dann kann ich sie bei mir nachtragen.)
Zum anderen: Bei WM_DRAWITEM und WM_MEASUREITEM setzt Du WinProc auf 1, d.h. es wird also anschließend die Windowsprozedur aufgerufen. Da XProfan 11.2 eigene erweiterte Menüs anbietet, reagiert diese dann also auch auf diese Messages. Ich weiß nun nicht, was ChangeMenuItem genau macht, aber vermutlich gibst Du den Menu-Einträgen den Stil MF_OWNERDRAW. (Ansonsten würden diese Messages ja nicht erzeugt werden.) Da Du aber vermutlich den Datenwert (letzten Parameter bei AppendMenu im Falle von MF_OWNERDRAW) anders nutzt als ich, muss es hier zwangsläufig knallen, weil meine Routinen für diese beiden Messages ja nicht mit Deinen Inhalten rechnen.
Gruß Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 06.04.2009 ▲ |
| |
| | Detlef Jagolski | Sorry MenuInfo steht in structs.ph KompilierenMarkierenSeparierenMENUINFO = cbSize&,fMask&,dwStyle&,cyMax&,hbrBack&,dwContextHelpID&,dwMenuData&;
ChangeMenuItem setzt MF_OWNERDRAW, Icon, Schrift Type und Schriftfarbe.
Gruß
Detlef |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 06.04.2009 ▲ |
| |
| | Detlef Jagolski | Hallo Roland,
habe jetzt Set(WinProc, 1) auf Set(WinProc, 0) gesetzt, und es geht.
Super und Danke |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 06.04.2009 ▲ |
| |
|
AntwortenThemenoptionen | 1.948 Betrachtungen |
ThemeninformationenDieses Thema hat 2 Teilnehmer: |