76930 1







Strona: [  >  ]  z  1     









Autor
Temat: GetMenuItemInfo - problem z wyciagnieciem nazwy pozycji menu











andrey
Łódź

Typ:
neutral
Postów: 295
Zarejestrowany: Mar 2003




GetMenuItemInfo - problem z wyciagnieciem nazwy pozycji menu
Najpierw wyjaśnie o co mi chodzi mam menu np. takie:PierwszyDrugi_________TrzeciI chce wyciagnać klikajac na jakaś pozycję w menu text tej pozycji np.: Klikam na pozycje 1 i wyciagam nazwę "Pierwszy"Korzystam więc z API GetMenuItemInfo w taki sposób:' W pozycji wykrywajacej kliknięcie danej pozyci menu piszę:Dim m AS MENUITEMINFO  m.cbSize = Len(m)  m.fMask = MIIM_STRING  GetMenuItemInfo hMenu, 1, True, mi problem jest następujący powino mi to pomoc wyciagnac włąsnie łańcuch znaków "Pierwszy" ale wyciaga ""otrzymuje wtedy w m.dwTypeData = ""  Co z tym fantem zrobić
_____________________________________________A Methodical Approach to Error Handling: On Error GoTo Hell




28-05-2004 11:19



 
        

3078613













karolinavb


Typ:
neutral
Postów: 467
Zarejestrowany: Jan 2003





Popatrz na stronę http://support.microsoft.com/default.aspx?scid=kb;EN-US;q216185 -"HOWTO: Create Multi-Column Menus in Visual Basic Using the WIN32 API", chociaż temat inny ale taki fragment tam jest.Wzięłam kawałki kodu z tej strony i uruchomiłam na przykładzie o którym rozmawialiśmy i chodzi dobrze, może porównaj odpowiednie fragmentyPozdrawiam Karolina
_____________________________________________Karolina




28-05-2004 16:31



 
  













andrey
Łódź

Typ:
neutral
Postów: 295
Zarejestrowany: Mar 2003





Dziękuje Karolino bardzo ciekawy przykład Nawet się nie domyślałem że można podzielić menu w pionie hmmm zastosowali do tego funkcje GetmenuItemInfo zobaczymy czy i mnie to cos pomoze. Jak cos sie zmieni napisze Pozdrawiam Rycerz w srebrnej zbroi Andrzej
_____________________________________________A Methodical Approach to Error Handling: On Error GoTo Hell




29-05-2004 09:35



 
        

3078613













andrey
Łódź

Typ:
neutral
Postów: 295
Zarejestrowany: Mar 2003





No to zaczyna mnie draznic wiesz chce sam znalezc swoj sposob na rozwiazanie tego problemu a juz nie wiem co jest ze nie chce dzialac Zerknij na to:Dim m As MENUITEMINFO  Dim bufor As String * 80    bufor = Space(80)    With m          .cbSize = Len(m)          .dwTypeData = bufor & Chr(0)          .fMask = MIIM_TYPE          .fType = MFT_STRING          .cch = Len(m.dwTypeData)          .fState = MFS_DEFAULT    End With  GetMenuItemInfo hMenu, 1, True, m W jednym z opsiow jakie znalazlem do tej funkcji przeczytalem ze zeby wyciagnac nazwe pola nalezy funkcje wywolac dwa razy za pierwszym razem dac .dwTypeData wartosc Null wywolac GetMenuItemInfo potem ustawic miejsce w cch i znow wywolac funkcje GetMenuItemInfo i wtedy powinno ruszyc Co ty na to?A teraz pytanie najglpsze jak sie nadaje wartosc Null Jest to chyba rzecz najprostsza a w tej chwili niemoge sobie przypomniec
[Post edytowany dnia 29-05-2004 09:59 przez andrey]_____________________________________________A Methodical Approach to Error Handling: On Error GoTo Hell




29-05-2004 09:58



 
        

3078613













karolinavb


Typ:
neutral
Postów: 467
Zarejestrowany: Jan 2003





Część 1-sz NULL, nie będę się rozwijała tylko zacytuję z MSDN:The Null ValueThe Variant data type can contain another special value: Null. Null is commonly used in database applications to indicate unknown or missing data. Because of the way it is used in databases, Null has some unique characteristics: Expressions involving Null always result in Null. Thus, Null is said to "propagate" through expressions; if any part of the expression evaluates to Null, the entire expression evaluates to Null.Passing Null, a Variant containing Null, or an expression that evaluates to Null as an argument to most functions causes the function to return Null.Null values propagate through intrinsic functions that return Variant data types. You can also assign Null with the Null keyword:Z = NullYou can use the IsNull function to test if a Variant variable contains Null:If IsNull(X) And IsNull(Y) Then  Z = NullElse  Z = 0End IfIf you assign Null to a variable of any type other than Variant, a trappable error occurs. Assigning Null to a Variant variable doesn't cause an error, and Null will propagate through expressions involving Variant variables (though Null does not propagate through certain functions). You can return Null from any Function procedure with a Variant return value.Variables are not set to Null unless you explicitly assign Null to them, so if you don't use Null in your application, you don't have to write code that tests for and handles it.Część 2.Skopiowałam Twój fragment do wspomnianego w poprzednim poście projektu, u mnie chodzi poprawnie, wobec tego przesyłam tylko fragment dotyczący samych deklaracji może tam masz coś źle, jeśli nie mogę wysłać znowu maila z tym całym "niezwykle przecudnej urody" przykładem.*****************Public Type MENUITEMINFO  cbSize As Long  fMask As Long  fType As Long  fState As Long  wID As Long  hSubMenu As Long  hbmpChecked As Long  hbmpUnchecked As Long  dwItemData As Long  dwTypeData As String  cch As LongEnd TypePublic Const MF_MENUBARBREAK = &H20& ' columns with a separator linePublic Const MF_MENUBREAK = &H40&    ' columns w/o a separator linePublic Const MF_STRING = &H0&Public Const MF_HELP = &H4000&Public Const MFS_DEFAULT = &H1000&Public Const MIIM_ID = &H2Public Const MIIM_SUBMENU = &H4Public Const MIIM_TYPE = &H10Public Const MIIM_DATA = &H20Public Declare Function GetMenuItemInfo Lib "user32" _  Alias "GetMenuItemInfoA" _  (ByVal hMenu As Long, ByVal un As Long, ByVal B As Boolean, _  lpMenuItemInfo As MENUITEMINFO) As Long*****************************Pozdrawiam Karolina
_____________________________________________Karolina




29-05-2004 10:52



 
  













andrey
Łódź

Typ:
neutral
Postów: 295
Zarejestrowany: Mar 2003





Powoli zaczynam sie zalamywac ale prawdziwy mezczyzna nie placze Ponizej moj fragment kodu uzylem takich samych deklaracji a i tak nie moge wydobyc tego co jest napisane na pierwszej pozycji menu  Dim m As MENUITEMINFO  Dim bufor As String * 80    bufor = Space(80)    With m          .cbSize = Len(m)          .dwTypeData = bufor & Chr(0)          .fMask = MIIM_ID Or MIIM_DATA Or MIIM_TYPE Or MIIM_SUBMENU          .fType = MFT_STRING          .cch = Len(m.dwTypeData)          .fState = MFS_DEFAULT    End With  Call GetMenuItemInfo(hMenu, 1, True, m) "<<== tutaj zmienilem z GetMenuItemInfo hMenu, 1, true, m  Debug.Print m.cbSize        ' tylko ta wartosc pozostaje  Debug.Print m.cch            ' reszta oprocz kilku mi nie potzrebnych   Debug.Print m.dwItemData    ' daje wartosci zero  Debug.Print m.dwTypeData    ' lub tak jak ta ""  Debug.Print m.fMask          ' gdy sprawdzam dzialanie programu krok po kroku przy uzyciu breakpointow  Debug.Print m.fState        ' okazuje sie ze po wywolaniu  Debug.Print m.fType          ' funkcji GetMenuItemInfo  Debug.Print m.hbmpChecked    ' przerazajaca wiekszosc pokazuje mi Object variable or With block not set  Debug.Print m.hbmpUnchecked  Debug.Print m.hSubMenu  Debug.Print m.wIDCo takiego robie zle? Karolino jezeli ty wydobywasz pierwsza pozycje menu to co jest w niej napisane to wyslij mi ten przkladzik znowu Dzieki z gory i przepraszam za klopot Ale chce miec poczucie ze samemu udalo mi sie rozwiazac dany problem a tu idzie jak krew z nosa
_____________________________________________A Methodical Approach to Error Handling: On Error GoTo Hell




31-05-2004 23:46



 
        

3078613













karolinavb


Typ:
neutral
Postów: 467
Zarejestrowany: Jan 2003





Andrzejku szkoda czasu na tzw. "poczucie", mój kolega mówi zwykle  "...(brzydkie słowo) bo co będę tracił czas, skoro ktoś to już zrobił, dlatego wymyślili Internet...",  wysyłam, ale najpierw wstawię Twoje fragmenty...Pozdrawiam Karolina
_____________________________________________Karolina




01-06-2004 08:24



 
  













andrey
Łódź

Typ:
neutral
Postów: 295
Zarejestrowany: Mar 2003





Karolino zaspokoj moja ciekawosc dlaczego poprawnie odczytywane jest menu przez funkcje GetMenuItemInfo jezeli do m ładujemy wszystkie elementy a nie moge wydobyc tego info dla pojedynczego konkretnego elementu ale dla innych sledzacych nasze wypowiedzi wstawiam ten kawalek kodu moze komus pomoze:Dim m As MENUITEMINFO  Dim s As Integer    s = GetMenuItemCount(hMenu) - 1    For i = 0 To s    bufor = Space(80)    With m          .cbSize = Len(m)          .dwTypeData = bufor & Chr(0)          .fMask = MIIM_TYPE          .fType = MF_STRING          .cch = Len(m.dwTypeData)          .fState = MFS_DEFAULT    End With  Call GetMenuItemInfo(hMenu, i, True, m)  With m  Debug.Print .cbSize  Debug.Print .cch  Debug.Print .dwItemData  Debug.Print .dwTypeData  Debug.Print .fMask  Debug.Print .fState  Debug.Print .fType  Debug.Print .hbmpChecked  Debug.Print .hbmpUnchecked  Debug.Print .hSubMenu  Debug.Print .wID  End With    Next iDziekuje Karolino twoj sampel dziala swietnie tak jak mi mowi dziewczyna "Przestan sie uzalac" i przestalem pozostaje juz tylko ciekawosc
_____________________________________________A Methodical Approach to Error Handling: On Error GoTo Hell




01-06-2004 10:59



 
        

3078613













karolinavb


Typ:
neutral
Postów: 467
Zarejestrowany: Jan 2003





Nie wszystkie Andrzejku tylko:          .dwTypeData = bufor & Chr(0)          .cch = Len(mnuItemInfo.dwTypeData) oczywiście przy takiej deklaracji buffor (stały rozmiar), w przeciwnym wypadku, gdy w tej strukturze nie "oświeżysz" powyższych parametrów, "nie ma miejsca" na nowe dane (C++), rozmiar się nie zgadza (cch "jest za małe", jeśli można tak powiedzeć). Bardzo prosto się o tym przekonasz jeśli w moim przykładzie usuniesz te linijki i wielokrotnie przyciśniesz klawisz "PokazItem", czy jak on się tam nazywa, możesz wówczas zobaczyć jak dłuższy napis po krótszym się nie mieści i jest to zjawisko "postępujące".Nie wiem czy precyzyjnie się wyraziłam, ale wiesz chyba o co chodzi...Pozdrawiam Karolina
_____________________________________________Karolina




01-06-2004 11:27



 
  













andrey
Łódź

Typ:
neutral
Postów: 295
Zarejestrowany: Mar 2003





Dziękuje wykład został zrozumiany i przyswojony Chyba wątek z wyciąganiem pozycji z menu jest już zamknięty a inni czytając to co zostało tu napisane napewno sobie poradzą mając podobny problem Wielkie Dzięki Pozdrawiam Andrzej
_____________________________________________A Methodical Approach to Error Handling: On Error GoTo Hell




01-06-2004 11:45



 
        

3078613












Wszystkich odpowiedzi: 9 :: Maxymalnie na stronę: 20










Strona: [  >  ]  z  1     









Wyszukiwarka