Hwnd:ToInt32()

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Hwnd:ToInt32()

Beitrag von AUGE_OHR »

hi,

was bedeutet :ToInt32() in VB/C ?

Ich habe das Handle von einem activeX, aber da nur 1/26 funktioniert bin ich mir nicht sicher ob ich das :ToInt32() benötige.
197960
197962
197920
197852
197856
197860
197864
197850
197844
197876
197880
197884
197888
197874
197868
459990
197904
197908
197912
328968
197898
197892
197928
328994
263486
394554
das sind die Hwnd, ohne ToInt32(), die bekomme und nur das erste geht ...
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Hwnd:ToInt32()

Beitrag von Tom »

Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Hwnd:ToInt32()

Beitrag von AUGE_OHR »

gibt es eine Xbase++ Function dafür ?
Die o:hwnd Werte sind numerisch.
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Hwnd:ToInt32()

Beitrag von Tom »

Hallo, Jimmy.

Ich verstehe Dein Ausgangsposting überhaupt nicht. Ansonsten: Was ist mit U2Bin() und Bin2U()?

Edit: Angeblich konvertiert die AX-Schnittstelle von Xbase++ doch sowieso alles automatisch. Auch ein oActiveXObject:Hwnd() sollte einen Xbase-Datentypen zurückliefern.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Hwnd:ToInt32()

Beitrag von AUGE_OHR »

hi,
Tom hat geschrieben: Ich verstehe Dein Ausgangsposting überhaupt nicht. Ansonsten: Was ist mit U2Bin() und Bin2U()?
Edit: Angeblich konvertiert die AX-Schnittstelle von Xbase++ doch sowieso alles automatisch. Auch ein oActiveXObject:Hwnd() sollte einen Xbase-Datentypen zurückliefern.
Ja die Liste sind die oActiveXObject:Hwnd() Werte und damit bekomme ich auch auf der 1st TabPage etwas angezeigt.

leider ist das immer nur auf der 1st und auf den anderen ist nichts.
da ich auch zum Teil :ToInt32() gesehen habe beim google´n, dachte ich mir was das wohl sein könnte den da irgendwo ist wohl das "Problem"

Code: Alles auswählen

Description
Inserts a new TabControlItem (tab) into the TabControl.
Syntax
Public Function InsertItem( _
   ByVal Index As Long, _
   ByVal Caption As String, _
   ByVal Child As Integer, _
   ByVal Image As Long _
) As TabControlItem

Parameters
Index     Index of the new TabControlItem. 
Caption  Caption of the new TabControlItem. 
Child      Children of the new TabControlItem. 
Image    Image index 
nur der 3th Parameter kann es sein und mit :Hwnd hat es was zu tun ...

Ich hatte das noch gar nicht bemerkt, aber Roger hat mich darauf aufmerksam gemacht das dies
Problem noch nicht gelöst ist ( Er kann nichts auf einer TabPage plazieren).
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Hwnd:ToInt32()

Beitrag von Tom »

Hallo, Jimmy.

Jetzt - da ich Deinen Beitrag in Rogers Forum gelesen habe :wink: - verstehe ich (hoffentlich). Du beschäftigst Dich mit dem TabControl von CodeJock und hast 26 Tabs, kannst aber nur auf dem ersten Elemente platzieren. Für die 25 Folgetabs bekommst Du - vermutlich in "Child", dem dritten Parameter - ein Array (?), das vermeintlich Handles enthält, richtig? Wie willst Du diese Handles dann einsetzen? Die Xbase-Doku sagt, dass Handles auf der Xbase-Sprachebene nicht verwendet werden können.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Hwnd:ToInt32()

Beitrag von brandelh »

Hi,

aber ein handle ist nichts anderes als ein 32 Bit DWORD.
Auch in Xbase++ werden diese als integer abgespeichert, wobei LONG # DWORD ... könnte ein Problem sein.

Auch wenn man auf Xbase++ selbst damit nichts anfangen kann, für den Aufruf von API oder ActiveX kann man sie nutzten.
Man bekommt ja auch mit :getHWND() die Handles von Fenstern und :getHDC() den device context von Druckern zurück.

Für Codejock werden diese Handles schon wichtig sein ... ob die Automatik im Wege steht ... :?
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Hwnd:ToInt32()

Beitrag von AUGE_OHR »

hi,
Tom hat geschrieben:Wie willst Du diese Handles dann einsetzen? Die Xbase-Doku sagt, dass Handles auf der Xbase-Sprachebene nicht verwendet werden können.

Code: Alles auswählen

   // Diese Zeile "übersetzt" XbpTabpage => HX_Tabpage
   //
   #xtranslate XbpTabpage     => HX_Tabpage
   //
   // Tabcontrol Manager need as "Parent"
   //
   oTab := HX_Tab():new(oDlg:drawingArea,,{0,0}, {600,480-50} )
   oTab:create()
   //
   // here are the (HX_)Tabpages
   //
   FOR i := 1 TO 26
      oXbp := XbpTabpage():new(oTab , , {0, 10}, {600-100,480-150} )
      oXbp:caption := " &"+CHR(i+64)+" "
      oXbp:Icon    := "star32.ico"
      oXbp:create()
   NEXT

   SetAppWindow(oDlg)
   SetappFocus(oDlg)
   // Event loop = Programmsteuerung
   nEvent := 0
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:HandleEvent( nEvent, mp1, mp2 )
   ENDDO
so das ist das Demo. und hier nun die Class

Code: Alles auswählen

// Tabcontrol Manager need as "Parent"
//
CLASS  HX_Tab FROM XbpActiveXControl
...
METHOD HX_Tab:Init(oParent, oOwner, aPos, aSize, aPP, lVisible)
   ::XbpActiveXControl:Init(oParent,oOwner, aPos, aSize)
   ::CLSID   := "{5BB60DA3-2838-4538-A28E-B114BD160290}"
   ::License := "Suite Controls Copyright (c) 2003-2009 Codejock Software"+ Chr(13)+Chr(10) +;
                        "PRODUCT-ID: Codejock.Controls.ActiveX.v13.0"+ Chr(13)+Chr(10) +;
                        "VALIDATE-CODE: NSR-VTA-EXQ-TPT"
   ::lfirst          := .T.
RETURN self

METHOD HX_Tab:Create(oParent, oOwner, aPos, aSize, aPP, lVisible)
   ::XbpActiveXControl:Create(oParent,oOwner, aPos, aSize)
   //
   // define MapEvent
   //
   ::DefEvent()
RETURN self

*********************************************************************
//
// here now TabPAGE
//
CLASS  HX_TabPage FROM XbpActiveXControl
EXPORTED:
   CLASS VAR oTabControl
   CLASS VAR nIndex
   CLASS METHOD initClass()
   METHOD      Init()
   METHOD      Create()
   METHOD      DefEvent()
   //
   // Property from original XbParts ASSIGN METHOD
   //
   VAR TabActivate                 // Xbase++
   METHOD Tab2Activate()

   VAR Caption                        // Xbase++
   VAR x_Caption                     // Gets or sets the text associated with this control.
   ASSIGN METHOD _Caption()  VAR x_Caption

   VAR Icon                            // Xbase++ NEW
   VAR x_Icon2                       // Gets or sets the Icon associated with this control.
   ASSIGN METHOD _IPicture()  VAR x_Icon2

   VAR AutoSize
   ASSIGN METHOD _AutoSize             VAR AutoSize

   VAR HX_Tab                       // Instance of activeX
ENDCLASS

CLASS METHOD HX_TabPage:initClass()
   ::nIndex      := 0
RETURN self

METHOD HX_TabPage:Init(oParent, oOwner, aPos, aSize, aPP, lVisible)
   ::oTabControl := oParent
//
// das geht hier NICHT
//
*   ::XbpActiveXControl:Init()
*   ::XbpActiveXControl:Init(oParent, oOwner, aPos, aSize)
*   ::CLSID := "{DC8335FD-F292-4A6B-9CAF-4E8EBDC5BB55}"
//
// also über die Class VAR ::HX_TAB
//
   ::HX_Tab := XbpActiveXControl():New(::oTabControl,,{0,0},{0,0})
   ::HX_Tab:CLSID := "{DC8335FD-F292-4A6B-9CAF-4E8EBDC5BB55}"
*  ::HX_Tab:CLSID := "Codejock.TabControlPage"+HX_VERSION()
RETURN self

METHOD HX_TabPage:Create(oParent, oOwner, aPos, aSize, aPP, lVisible)
LOCAL oTab
LOCAL hWnd      := 0
LOCAL h1Wnd     := 0
LOCAL oXbp

   IF ::Icon == NIL
      ::Icon := "DUMMY.ICO"
   ENDIF
   IF ::Caption == NIL
      ::Caption := ""
   ENDIF
   // 
   // hier nun das :Create
   //
   ::HX_Tab:create()
   //
   // und davon das Handle. beide sind gleich laut Logfile
   //
   hWnd  := ::HX_Tab:hWnd
   h1Wnd := ::HX_Tab:GethWnd()

   SET ALTER ON
   SET CONSOLE OFF
   ? hWnd,h1Wnd
   SET CONSOLE ON
   SET ALTER OFF
   //
   // SubscribeEvent() EvSelectedChanged abschalten
   //
   ::oTabControl:lfirst := .T.
   //
   // add Tabpage to TabControl
   //
   oTab := ::oTabControl:insertItem(::nIndex ,;
                                    ::Caption,;
                                         hWnd,;
                                            1 )
   //
   // SubscribeEvent() EvSelectedChanged anschalten
   //
   ::oTabControl:lfirst := .F.

   oTab:enabled := .T.
   oTab:EnsureVisible()
   ::nIndex++
   ::AutoSize := .F.
   // Color for TabPAGE "Body"
*::HX_Tab:setProperty('backColor',AutomationTranslateColor(GraMakeRGBColor({153,200,255}),.f.))
*::HX_Tab:setProperty('backColor',AutomationTranslateColor( GRA_CLR_YELLOW,.f.))
   //
   // hier eine XbpStatic in "GRÜN"
   // 
   oXbp := XbpStatic():new(::HX_Tab, ,{200+(::nIndex*10),100},{100,100},{{XBP_PP_BGCLR,GRA_CLR_GREEN }} )
   oXbp:caption :=  "Button "+::Caption
   oXbp:create():Show()
   //
   // after Create call ASSIGN Method
   //
   ::x_Icon2   := ::Icon
   ::x_Caption := ::Caption

RETURN self

METHOD HX_TabPage:DefEvent()
*  ::SubscribeEvent( EvClick       , {|oSelf| ::TabActivate() })
RETURN self
es werden also 26 TABs erstellt wozu jeweils eine TabPAGE gehört.

mit ::oTabControl:insertItem(x1,x2,x3,x4) wird das TabControl mit den TABs und TabPAGE
verknüpft. Auf die TabPAGE lege ich nun eine Static "in Grün".
Die Parameter:
x1 laufender Index,begin mit 0
x2 Caption des Tab
x3 Child / Integer -> Hwnd ?!
x4 Icon Nummer. hab hier nur 1

Wenn ich jetzt auf die TABs klicke "schalte" er "intern" um da ich noch keine Events aktiviert habe
Von "B" bis "Z" sehe ich nun kein "Grün", aber wenn ich auf "A" click sehe ich es... warum nur "A"

Es muss auch x3 sein, den wenn ich x3 := 0 setzte sehe ich gar kein "GRÜN".

verwunderlich ist auch das ich über die Class VAR HX_TAB gehen muss weil das activeX sonst
beim :init() schon rausfliegt ... oder ob es da einen Zusammenhang gibt ... ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Hwnd:ToInt32()

Beitrag von AUGE_OHR »

hi,

der Code ist schon richtig, aber weil ich ja dynamisch in einer Schleife arbeite wird ähnlich
"String to Codeblock" durch das hochzählen nur die erste (oder letzte) dem Parent richtig
zugeordnet. Das passiert mit Xbase++ ... nicht mit VB oder X- ...

ich habe dann also ge"google"t und irgendwo sowas gefunden
Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
und daraus folgenden Xbase++ Code gemacht

Code: Alles auswählen

FUNCTION SETXPARENT(hWndChild,hWndNewParent)
DllCall( 'User32', DLL_STDCALL, 'SetParent', hWndChild,hWndNewParent)
RETURN NIL
damit konnte ich also anfangen den richtigen Parent zuzuordnen.

Nun hab ich ein Static genommen und ordne dies dem Parent TABItem zu. Nebenbei habe ich
durch das Static auch gleich die XbPartHandler geerbt :)

Code: Alles auswählen

   FOR i := 1 TO iMax
      oTab := aTab[i]:oBody

      oTab:clipSiblings := .T.
      oParent := oTab
      oOwner  := SetappWindow()

      oXbp := XbpPushButton():new(oParent ,, {200+(i*10),100}, {100,100} )
      oXbp:caption :=  "this is "+CHR(i+64)
      oXbp:create()
      bBlock := "{|| MSGBOX('hi, from "+CHR(i+64)+"')}"
      oXbp:activate:= &bBlock
   NEXT
nun hab ich 26 Button´s, eins auf jeder Tabpage und bBlock wird richtig ausgeführt.
Demo , DLL und LIB folgen im Thread HX_Class
gruss by OHR
Jimmy
Antworten