Français
Forum

ChoiceBox Kontextmenü

 

Detlef
Jagolski
Salut,

une ChoiceBox avec dem Stil 3 editierbar et sortiert venez aussi un Kontextmenü.

cet Kontextmenü voudrais je Subclassen comment un Éditer.

mais chez qui ChoiceBox venez un WM_CONTEXTMENU ou bien WM_LBUTTONDOWN Message pas à.

Gibt es une autre Message chez qui ChoiceBox? ou bien hat einer une autre concept?

Gru0

Detlef
KompilierenMarqueSéparation
 $H WINDOWS.PH
 $H MESSAGES.PH
Struct lpdis = CtlType&, CtlID&, itemID&, itemAction&, itemState&, hwndItem&, hDC&, Rect#(16), itemData#(4)
Struct lpmis = CtlType&, CtlID&, itemID&, itemWidth&, itemHeight&, itemData&
Struct  point = X&,Y&
Struct  rect  = Left&,Top&,Right&,Bottom&
Struct  MENUINFO = cbSize&,fMask&,dwStyle&,cyMax&,hbrBack&,dwContextHelpID&,dwMenuData&
Declare lpmis#
Dim lpmis#,lpmis
Declare lpdis#
Dim lpdis#,lpdis
Declare IsTrack&
Var Indent& = 20
Var PopFlag& = 0
Var ID& = 0
Var PopID& = 0
Var S_TrackBkColor& = $FDFDE1
Var S_MenuBkColor& = $ADFDE1
Var TrackBkColor& = $FBFABC
Var MenuBkColor& = $1BFABC
Var S_BkColor& = 0
Var BkColor& = 0
################################
Var Ende& = 0
cls
Fenstermenu()
Var Edit& = Create(ChoiceBox,%hwnd,3,10,10,120,24)
SubClass Edit&,1     Für die Anzeige des neuen Kontext-Menüs
SubClass %hWnd,1     Für die Menübotschaften
Decimals 0

Whilenot Ende&

    Waitinput

    If MenuItem(1001)

        Popflag& = 1
        PopMenu()
        Popflag& = 0

        select %Menuitem

            CaseOf 100,101,102,103

            SetText Edit&,Eintrag +str$(%menuitem-99)

        Endselect

    Elseif Menuitem(203)

        Ende& = 1

    Endif

EndWhile

Dispose lpdis#
Dispose lpmis#
End
################################

SubClassProc

    If SubClassMessage(Edit&, ~WM_CONTEXTMENU)

        SetMenuItem 1001
        Set(WinProc, 0)

    ElseIf SubClassMessage(%hwnd, ~WM_DRAWITEM)

        DrawProc(&slparam)
        Set(WinProc, 0)

    ElseIf SubClassMessage(%hwnd, ~WM_MEASUREITEM)

        MeasureProc(&slparam)
        Set(WinProc, 0)

    ElseIf SubClassMessage(%hwnd, ~WM_ENTERIDLE)

        Hier wird das Problem von 2 verwschiedenen Ownerdrawmenüs behandelt
        Hat das Fenster nämlich auch ein Menü, haut das nicht mehr hin !
        Also muss das erste Menü erst wieder verschwinden !

        If &sWparam = ~MSGF_MENU

            If popflag&

                Declare p#
                Dim p#,point
                ~GetCursorPos(p#)
                id& = ~WindowFromPoint(p#.X&,p#.Y&)

                If id&=%hwnd

                    popflag&=0
                    popid&=&slParam
                    ~DestroyWindow(popid&)

                EndIf

            EndIf

            Set(WinProc, 0)

        Endif

    ElseIf SubClassMessage(%hwnd, ~WM_INITMENU)

        If ~GetMenu(%hwnd) = &hMenu

            BKColor& = MenuBkColor&
            S_BKColor& = S_MenuBkColor&

        Else

            BKColor& = TrackBkColor&
            S_BKColor& = S_TrackBkColor&

        Endif

        Set(WinProc, 0)

    Elseif SubClassMessage(%hwnd,~WM_EXITMENULOOP)

        Set(WinProc, 0)

    EndIf

EndProc

Proc Fenstermenu

    PopUp &Datei
    AppendMenu 200,Laden
    AppendMenu 201,Speichern
    AppendMenu 202,Speichern als
    AppendMenu 203,Ende
    ~ModifyMenu(&hMenu,200,~MF_BYCOMMAND | ~MF_OWNERDRAW,200,0)
    ~ModifyMenu(&hMenu,201,~MF_BYCOMMAND | ~MF_OWNERDRAW,201,0)
    ~ModifyMenu(&hMenu,202,~MF_BYCOMMAND | ~MF_OWNERDRAW,202,0)
    ~ModifyMenu(&hMenu,203,~MF_BYCOMMAND | ~MF_OWNERDRAW,203,0)
    ~ModifyMenu(&hMenu,1040,~MF_BYCOMMAND | ~MF_OWNERDRAW,1040,0)
    Declare m#
    Dim m#,MENUINFO
    M#.cbSize&=SizeOf(m#)
    M#.hbrBack&=~CreateSolidBrush(365255)
    M#.fMask&=~MIM_BACKGROUND | ~MIM_STYLE
    M#.dwStyle&=~MNS_AUTODISMISS | ~MNS_MODELESS
    ~SetMenuInfo(&hMenu,M#)
    ~DrawMenubar(%hwnd)
    Dispose m#

EndProc

Proc GetMenuIDName

    Parameters Menu&,ItemID&
    Declare mii#,dwTypeData#,ItemName$
    Dim dwTypeData#,1024
    Dim mii#,44
    Long mii#,0 = 44
    Long mii#,4 = ~MIIM_STRING
    Long mii#,36 = dwTypeData#
    Long mii#,40 = 1024

    If ~GetMenuItemInfo(Menu&,itemID&,0,mii#)

        ItemName$ = Trim$(String$(dwTypeData#,0))

    EndIf

    Dispose mii#
    Dispose dwTypeData#
    Return ItemName$

EndProc

Proc MeasureProc

    Parameters par&
    Declare Point#,Itemtext$
    Dim Point#,point
    lpmis# = Par&
    Itemtext$ = GetMenuIDName(&hMenu,lpmis#.itemid&)
    ~GetTextExtentPoint32(%hdc,Addr(Itemtext$),Len(Itemtext$),Point#)
    lpmis#.itemwidth&  = Point#.X&+indent&
    lpmis#.itemheight& = Point#.Y&
    Dispose Point#

EndProc

Proc DrawProc

    Parameters Par&
    Declare Itemtext$
    Declare Rect#
    Dim Rect#,rect
    lpdis# = Par&
    Long Rect#,0= Long(lpdis#,28),Long(lpdis#,32),Long(lpdis#,36),Long(lpdis#,40)
    Itemtext$ = GetMenuIDName(&hMenu,lpdis#.itemid&)

    If lpdis#.itemstate& & ~ODS_SELECTED

        ~SetBkColor(lpdis#.hdc&,S_BKColor&)
        ~SetTextColor(lpdis#.hdc&,$000000)

    Else

        ~SetBkColor(lpdis#.hdc&,BKColor&)
        ~SetTextColor(lpdis#.hdc&,$000000)

    EndIf

    Var Brush& = ~CreatesolidBrush(rgb(255,0,0))
    ~Fillrect(lpdis#.hdc&,rect#,Brush&)
    Long Rect#,0= Long(lpdis#,28)+indent&,Long(lpdis#,32),Long(lpdis#,36),Long(lpdis#,40)
    ~ExtTextOut(lpdis#.hdc&,rect#.left&,Rect#.top&,~ETO_OPAQUE,Rect#,Addr(Itemtext$) ,len(itemtext$),0)
    Dispose Rect#
    ~DeleteObject(Brush&)

EndProc

Proc CreatePopup

    CreateMenu
    AppendMenu 100,Eintrag 1
    AppendMenu 101,Eintrag 2
    AppendMenu 102,Eintrag 3
    AppendMenu 103,Eintrag 4
    menupunkte auf ownwerdraw setzen
    ~ModifyMenu(&hMenu,100,~MF_BYCOMMAND | ~MF_OWNERDRAW,100,0)
    ~ModifyMenu(&hMenu,101,~MF_BYCOMMAND | ~MF_OWNERDRAW,101,0)
    ~ModifyMenu(&hMenu,102,~MF_BYCOMMAND | ~MF_OWNERDRAW,102,0)
    ~ModifyMenu(&hMenu,103,~MF_BYCOMMAND | ~MF_OWNERDRAW,103,0)
    Return GetMenuHeight(&hMenu)

EndProc

Proc PopMenu

    Declare X&,Y&
    CreatePopup()
    Declare Rect#
    Dim Rect#,Rect
    ~GetWindowRect(Edit&,Rect#)
    ~SetCursorpos(rect#.left&+width(Edit&)+16,rect#.top&+8)
    ~MapWindowPoints(0,Edit&,Rect#,2)
    Trackmenu Rect#.Right&+
>12,Rect#.Top&+12 Dispose Rect# ENDPROC

Salut

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



s'il te plaît Thema korrekten Titel donner, z.B. Contextmenü de Choicebox, avec Nochmal peux später aucun quoi anfangen.
 
12.06.2008  
 




Andreas
Miethe


Detlef Jagolski
Salut,

une ChoiceBox avec dem Stil 3 editierbar et sortiert venez aussi un Kontextmenü.

cet Kontextmenü voudrais je Subclassen comment un Éditer.

mais chez qui ChoiceBox venez un WM_CONTEXTMENU ou bien WM_LBUTTONDOWN Message pas à.

Gibt es une autre Message chez qui ChoiceBox? ou bien hat einer une autre concept?

Gru0

Detlef



qui Meldungen venons im Éditer-Contrôle qui Choicebox à. Du musst alors cela Handle des Edits ermitteln.

Gruss
Andreas
KompilierenMarqueSéparation
 $H windows.ph
 $H messages.ph
Struct CI = cbSize&,rcItem#(16),rcButton#(16),stateButton&,hwndCombo&,hwndItem&,hwndList&
Def &False 0
Def &True 1
Declare hWin&, hCombo&, Quit&
CLS
hCombo& = @Create(ChoiceBox, %hwnd, 3, 10, 10, 280, 150)

WhileLoop 1, 10, 1

    AddChoice(hCombo&, Test  + @Str$(&Loop))

EndWhile

Quit& = &False
Declare ci#
Dim ci#,CI
ci#.cbSize& = SizeOf(ci#)
~GetComboBoxInfo(hCombo&,ci#)
Var edit& = ci#.hwndItem&
Set(SubClassMode, 1)
SubClass Edit&,1
SubClass %hwnd,1

Repeat

    WaitInput

    If %Key = 2

        Quit& = &True

    EndIf

Until Quit& = &True

End

Proc PopMenu

    CreateMenu
    AppendMenu 100,Eintrag 1
    AppendMenu 101,Eintrag 2
    AppendMenu 102,Eintrag 3
    AppendMenu 103,Eintrag 4
    Return TrackMenu()

ENDPROC

SubClassProc

    If SubClassMessage(Edit&, ~WM_CONTEXTMENU)

        select PopMenu()

            CaseOf 100

            SetText Edit&,Eintrag 1

            CaseOf 101

            SetText Edit&,Eintrag 2

            CaseOf 102

            SetText Edit&,Eintrag 3

            CaseOf 103

            SetText Edit&,Eintrag 4

        Endselect

        Set(WinProc, 0)

    ElseIf SubClassMessage(%hWnd, ~WM_DRAWITEM)

        Print Draw
        Set(WinProc, 0)

    ElseIf SubClassMessage(%hWnd, ~WM_MEASUREITEM)

        Print Measure
        Set(WinProc, 0)

    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 :  [...] 
13.06.2008  
 




Detlef
Jagolski
merci Andreas, Du jusqu'à un richtiger Profi.
 
XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11
13.06.2008  
 



Andreas ist qui profigste Profi qui mir chez oui c'est ca solchen Problemen De toute façon comme erstes einfällt!

Wir devrait ihn sous irgend einem Vorwand öfter ici her locken.
 
13.06.2008  
 




Andreas
Miethe


ne...aucune Profi . Ist seulement un schönes Hobby.
Habe beruflich rein gar rien avec cela trop 1faire.
 
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 :  [...] 
13.06.2008  
 




Detlef
Jagolski
si profession ou bien Hobby, sur jedenfall Profi.

Salut

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




Andreas
Miethe


Detlef Jagolski
si profession ou bien Hobby, sur jedenfall Profi.

Salut

Detlef


citation :
un Profi, Kurzwort de veraltend Professionist, ist quelqu'un, qui im opposition zum Amateur ou bien Dilettanten une Tätigkeit beruflich ou bien zum Erwerb des eigenen Lebensunterhalts comme Erwerbstätigkeit ausübt. :
 
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 :  [...] 
13.06.2008  
 



oui, qui übliche Erklärung, qui, comment je trouve, sur Grund dessen cela qui Discours lebt, pas plus wirklich zutrifft. Zumindest wird cela mot Profi imho deutlich weiträumiger genutzt - z.B. abgetrennt de beruflich ou bien Erwerbstätigkeit - alors wird Profi plutôt pour spécialiste genutzt comme spécialiste.

Beispielsweise ist quelqu'un comment Du pour mich un entier exzellenter Api-Profi - et pas seulement un Api-spécialiste -, aussi si Du peut-être maître baigneur de profession es et/mais erwerbstätig comme Schraubensortierer Brillenetuis zusammensetzt.
 
13.06.2008  
 




Andreas
Miethe


iF
oui, qui übliche Erklärung, qui, comment je trouve, sur Grund dessen cela qui Discours lebt, pas plus wirklich zutrifft. Zumindest wird cela mot Profi imho deutlich weiträumiger genutzt - z.B. abgetrennt de beruflich ou bien Erwerbstätigkeit - alors wird Profi plutôt pour spécialiste genutzt comme spécialiste.

Beispielsweise ist quelqu'un comment Du pour mich un entier exzellenter Api-Profi - et pas seulement un Api-spécialiste -, aussi si Du peut-être maître baigneur de profession es et/mais erwerbstätig comme Schraubensortierer Brillenetuis zusammensetzt.


merci !

je connais mich pas mal aus, belassen wirs dabei.

Woher weisst Du le moi maître baigneur suis ?
Geraten ou bien gewusst ?

profession : siehe Avatar
 
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 :  [...] 
13.06.2008  
 



Geraten, fais Du Zähne heile? Gug la fois - mon sommes joli et alle encore là:
 
13.06.2008  
 




Frank
Abbing
exposition dir Andreas Avatar à...

à cette passenden Stelle aussi la fois un Lob de mir à Andreas. quand toujours on ihn um Aider bittet, il est toujours bereit trop aider! et très kompetent en supplément.
 
13.06.2008  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

1.266 Views

Untitledvor 0 min.
RudiB.09.03.2020
Peter Max Müller01.11.2019
Georg Teles10.07.2019
Erasmus.Herold10.07.2019
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie