Deutsch
Forum

SubClassProc Edit Kontextmenü

 

Detlef
Jagolski
Hallo Community!
,

Ich Subclasse das Editcontrol, sehe Oben um das Kontextmenu zu Verändern.

Klappt auch sehr gut.
KompilierenMarkierenSeparieren
Proc EditProc

    Parameters Edit&, Message&, wParam&, lParam&

    Select Message&

        CaseOf ~WM_CONTEXTMENU

        ConTextMenu LoWord(lParam&), HiWord(lParam&)

        CaseOf ~WM_MEASUREITEM

        MeasureItem Edit&, lParam&

        CaseOf ~WM_DRAWITEM

        DrawItem lParam&

    EndSelect

    Return ~CallWindowProc(OldEdit&Proc&, Edit&&, Message&, wParam&, lParam&)

EndProc


Aber mit der neuen Funktion SubClassProc Klappt es nicht.
KompilierenMarkierenSeparieren
Was mache ich falsch,?

Gruß

Detlef

14 kB
Hochgeladen:02.06.2008
Ladeanzahl185
Herunterladen
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
02.06.2008  
 



[...] 
 
02.06.2008  
 




Detlef
Jagolski
Hallo If,

die Prozeduren ConTextMenu, MeasureItem und DrawItem sind bei beiden gleich.

Nochwas, wenn ich das hwnd Menu Subclasse Funktioniert auch ohne Probleme.

Wie gesagt Code 1 Funktioniert ohne Probleme
Der andere nicht
KompilierenMarkierenSeparieren
 $P+
Set(ErrorLevel,0)
Set(FastMode,1)
*** GlobalStatements der Form
 $H C:PROGRAMMEXPROFAN10INCLUDEWINDOWS.PH
 $H C:PROGRAMMEXPROFAN10INCLUDEMESSAGES.PH
 $H C:PROGRAMMEXPROFAN10INCLUDESHELLAPI.PH
 $H C:PROGRAMMEXPROFAN10INCLUDESTRUCTS.PH
 $H C:PROGRAMMEXPROFAN10INCLUDECOMMCTRL.PH
 $H C:PROGRAMMEXPROFAN10INCLUDEWIND.PH
 $I C:PROGRAMMEPRFELLOWLIBXPMENU.INC
Def EnableMenuItem(3) !USER32,EnableMenuItem
var hOldFont& = Create(FONT,Arial,14,0,0,0,0)

Proc EditProc

    Parameters Edit&, Message&, wParam&, lParam&

    Select Message&

        CaseOf ~WM_CONTEXTMENU

        ConTextMenu LoWord(lParam&), HiWord(lParam&)

        CaseOf ~WM_MEASUREITEM

        MeasureItem Edit&, lParam&

        CaseOf ~WM_DRAWITEM

        DrawItem lParam&

    EndSelect

    Return ~CallWindowProc(OldEdit&Proc&, Edit&&, Message&, wParam&, lParam&)

EndProc

Declare appexit%
Declare Edit&
Set(TrueColor,1)
WindowStyle $003F
WindowTitle DesignForm
Window %maxX + 5,114 - 498,415
Cls ~GetSysColor(15)
UseFont MS Sans Serif,13,0,0,0,0
CreateImageList ICONXP32.DLL
SetMenuBitmap SP32.DLL, FSSP
SetCheckedImage 116
SetMenuStandardColors
var Rueckgaengig$    = Rückgängig
var Ausschneiden$    = Ausschneiden
var Kopieren$        = Kopieren
var Einfuegen$       = Einfügen
var Loeschen$        = Löschen
var AllesMarkieren$  = Alles markieren
var hConTextMenu& = ~CreatePopupMenu()
~AppendMenu(hConTextMenu&, ~MF_STRING,1000,Addr(Rueckgaengig$))
~AppendMenu(hConTextMenu&, ~MF_SEPARATOR,101,0)
~AppendMenu(hConTextMenu&, ~MF_STRING,1002,Addr(Ausschneiden$))
~AppendMenu(hConTextMenu&, ~MF_STRING,1003,Addr(Kopieren$))
~AppendMenu(hConTextMenu&, ~MF_STRING,1004,Addr(Einfuegen$))
~AppendMenu(hConTextMenu&, ~MF_STRING,1005,Addr(Loeschen$))
~AppendMenu(hConTextMenu&, ~MF_SEPARATOR,106,0)
~AppendMenu(hConTextMenu&, ~MF_STRING,1007,Addr(AllesMarkieren$))
ChangeMenuItem hConTextMenu&,0,3,hOldFont&
ChangeMenuItem hConTextMenu&,1,-1,-1
ChangeMenuItem hConTextMenu&,2,0,hOldFont&
ChangeMenuItem hConTextMenu&,3,1,hOldFont&
ChangeMenuItem hConTextMenu&,4,2,hOldFont&
ChangeMenuItem hConTextMenu&,5,5,hOldFont&
ChangeMenuItem hConTextMenu&,6,-1,-1
ChangeMenuItem hConTextMenu&,7,-1,hOldFont&
Edit&=CreateEdit(%hwnd,,125,90,121,21)
OldEdit&Proc& = ~SetWindowLong(Edit&,~GWL_WNDPROC,ProcAddr(EditProc,4))
SetWindowPos %hwnd = 207,114 - 498,415;0

WhileNot appexit%

    WaitInput

    If %key = 2

        appexit%=1

    ElseIf GetFocus(Edit1&)

    ElseIf %key = 4

        Fenstergröße

    ElseIf %key = 5

        Hilfe

    EndIf

Wend


KompilierenMarkierenSeparieren
 $P+
Set(ErrorLevel,0)
*** GlobalStatements der Form
 $H C:PROGRAMMEXPROFAN10INCLUDEWINDOWS.PH
 $H C:PROGRAMMEXPROFAN10INCLUDEMESSAGES.PH
 $H C:PROGRAMMEXPROFAN10INCLUDESHELLAPI.PH
 $H C:PROGRAMMEXPROFAN10INCLUDESTRUCTS.PH
 $H C:PROGRAMMEXPROFAN10INCLUDECOMMCTRL.PH
 $H C:PROGRAMMEXPROFAN10INCLUDEWIND.PH
 $I C:PROGRAMMEPRFELLOWLIBXPMENU.INC
Def EnableMenuItem(3) !USER32,EnableMenuItem
var hOldFont& = Create(FONT,Arial,14,0,0,0,0)

SubClassProc

    If SubClassMessage(Edit&, ~WM_CONTEXTMENU)

        ConTextMenu LoWord(&sLParam), HiWord(&sLParam)

    ElseIf SubClassMessage(Edit&, ~WM_MEASUREITEM)

        MeasureItem Edit&, &sLParam

    ElseIf SubClassMessage(Edit&, ~WM_DRAWITEM)

        DrawItem &sLParam

    EndIf

EndProc

Declare appexit%
Declare Edit&
Set(TrueColor,1)
WindowStyle $003F
WindowTitle DesignForm
Window %maxX + 5,114 - 498,415
Cls ~GetSysColor(15)
UseFont MS Sans Serif,13,0,0,0,0
CreateImageList ICONXP32.DLL
SetMenuBitmap SP32.DLL, FSSP
SetCheckedImage 116
SetMenuStandardColors
var Rueckgaengig$    = Rückgängig
var Ausschneiden$    = Ausschneiden
var Kopieren$        = Kopieren
var Einfuegen$       = Einfügen
var Loeschen$        = Löschen
var AllesMarkieren$  = Alles markieren
var hConTextMenu& = ~CreatePopupMenu()
~AppendMenu(hConTextMenu&, ~MF_STRING,1000,Addr(Rueckgaengig$))
~AppendMenu(hConTextMenu&, ~MF_SEPARATOR,101,0)
~AppendMenu(hConTextMenu&, ~MF_STRING,1002,Addr(Ausschneiden$))
~AppendMenu(hConTextMenu&, ~MF_STRING,1003,Addr(Kopieren$))
~AppendMenu(hConTextMenu&, ~MF_STRING,1004,Addr(Einfuegen$))
~AppendMenu(hConTextMenu&, ~MF_STRING,1005,Addr(Loeschen$))
~AppendMenu(hConTextMenu&, ~MF_SEPARATOR,106,0)
~AppendMenu(hConTextMenu&, ~MF_STRING,1007,Addr(AllesMarkieren$))
ChangeMenuItem hConTextMenu&,0,3,hOldFont&
ChangeMenuItem hConTextMenu&,1,-1,-1
ChangeMenuItem hConTextMenu&,2,0,hOldFont&
ChangeMenuItem hConTextMenu&,3,1,hOldFont&
ChangeMenuItem hConTextMenu&,4,2,hOldFont&
ChangeMenuItem hConTextMenu&,5,5,hOldFont&
ChangeMenuItem hConTextMenu&,6,-1,-1
ChangeMenuItem hConTextMenu&,7,-1,hOldFont&
Edit&=CreateEdit(%hwnd,,125,90,121,21)
SubClass Edit&, 1
SetWindowPos %hwnd = 207,114 - 498,415;0

WhileNot appexit%

    WaitInput

    If %key = 2

        appexit%=1

    ElseIf GetFocus(Edit1&)

    ElseIf %key = 4

        Fenstergröße

    ElseIf %key = 5

        Hilfe

    EndIf

Wend

SubClass Edit&, 0

Gruß

Detlef
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
02.06.2008  
 




RGH
Hallo,
so lange Du nicht z.B. auch die XPMENU.INC und andere Dateien, die nicht zum Lieferumfang von XProfan 10 gehören, hier mitlieferst, wird niemand Deinen Code testen und auf Fehlersuche gehen können. Mit unvollständigen Beispielcodes kann niemand etwas anfangen.

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
02.06.2008  
 




Detlef
Jagolski
Danke an alle! Klappt jetzt SUPER

Besondern Dank an RGH und Andreas Miethe

Gruß

Detlef

145 kB
Hochgeladen:11.06.2008
Ladeanzahl208
Herunterladen
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
11.06.2008  
 




Jörg
Sellmeyer
Sieht sehr professionell und so gar nicht profan aus!
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
11.06.2008  
 




Detlef
Jagolski
Löschen Klappt nicht!
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
12.06.2008  
 



Mach dafür ein neues Thema auf.
 
12.06.2008  
 




Jac
de
Lad
Und mit welchem Code funktioniert das jetzt??
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
08.07.2008  
 




Detlef
Jagolski
Hallo Jac,

das hat RGH noch geändert:

Neu in Subscriptionsversion RC7:
================================
ACHTUNG: ÄNDERUNGEN BEIM SUBCLASSING - Nach eingehenden Tests wurden einige
kleinere Änderungen notwendig:

- Die Funktion @SubClassMessage() verändert den Status, ob die ursprüngliche
Windowsprozedur aufgerufen wird oder nicht, nicht mehr! Soll sie nicht aufgerufen
werden, ist immer ganz bewußt Set(WinProc, 0) einzufügen.
Defaultmäßig wird, wenn nichts anderes angegeben wird, die ursprüngliche
Windowsprozedur im Anschluß an SubClassProc aufgerufen (wie bisher)
- Bislang sorgt eine interne Abfrage dafür, dass eine Message, die während der
SubClassProc aufgerufen wird, nicht erneut die SubClassProc aufruft, da dies in
seltenen Fällen zu Problemen führen kann. In diesem Fall wird die Message natürlich
nicht verschluckt, sondern an die ursprüngliche Windowsprozedur weitergeleitet.
Diese Abfrage kann nun mit @Set(SubClassMode, 1) übergangen werden.
Der abgesicherte Modus kann mit @Set(SubClassMode, 0) eingestellt werden.
- TrackMenu und @TrackMenu() gelten im Sinne des SubClassings auch als WaitInput.

Gruß

Detlef
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
08.07.2008  
 




Jac
de
Lad
Ah verstehe, der oben genannte Source müsste jetzt also gehen.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
08.07.2008  
 




Sato
Pinto
Hallo Detlef

Kann man die XPMENU.INC irgendwo laden? Ist mit diese INC auch die Tortengraphic machbar wie es in deinen Programm Plan-Calc steht?

Gruss

Sato
 
Sato Pinto
WIN XP Home
XPROFAN 11
09.07.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.011 Betrachtungen

Unbenanntvor 0 min.
RudiB.11.09.2022
H.Brill31.08.2021
rquindt27.08.2016
Ernst06.05.2016
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie