TWindowsLabel zu TScrollClient hinzufügen

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

das wurgel

Betreff: TWindowsLabel zu TScrollClient hinzufügen

BeitragSa, Okt 01, 2011 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Doku hat Folgendes geschrieben:
The client area is the panel that will actually be scrolled and is retrieved using the ScrollPanelClient command. This is the panel whose dimensions determine the total scrollable area, and is also the panel that all your child gadgets should be added to.


Die Funktion gibt ein Gadget vom Typ TScrollClient als TGadget zurück.
TScrollClient extends TProxyGadget extends TGadget.

Nun zum Problem: Wenn ich versuche ein TWindowsLabel hinzuzufügen passiert folgende:
TWindowsGUIDriver ruft CreateGadget auf.
CreateGadget erstellt ein TWindowsLabel und ruft dessen Methode setShape() auf.
setShape() ruft die Methode setArea() auf, welche in TWindowsLabel überschrieben wird.
setArea() ruft wiederum Super.setArea() auf, welche sich in TWindowsGadget befindet.
Diese setArea() ruft dann rethink() auf.
rethink() ruft dann QueueResize() auf.
QeueResize versucht dann den parent, also den ScrollClient zu einem TWindowsGadget zu casten, was natürlich nicht geht und will dann auf hdwpStruct zuzugreifen. Dabei kommt eine NullPointer Execption.

Es kann doch nicht sein, dass es nicht möglich ist, einen Label in einem Scrollpanel zu erstellen. Ich wüsste aber auch nicht was ich falsch gemacht haben könnte, jeder Methodenaufruf ab CreateLabel() führt unweigerlich zum nächsten.

Ich könnte das Label zwar zu ScrollPanelClient(sp).proxy hinzufügen, aber in diesem Fall importiere ich ProxyGadgets überhaupt nicht und bekomme den ScrollPanel-Client nur als Gadget übergeben. Da heißt, ich habe nur zugriff auf die TGadget-Sachen.

Wie kann man das also machen, ohne ProxyGadgets importieren zu müssen?, denn das ist ja eigentlich nicht der Sinn der Sache.
1 ist ungefähr 3
 

jsp

BeitragSa, Okt 01, 2011 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hilft das hier:
Code: [AUSKLAPPEN]

SuperStrict

Import MaxGui.ProxyGadgets

Import MaxGui.Drivers

Local Window1:TGadget = CreateWindow:TGadget("Window1",332,194,397,162,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE |WINDOW_STATUS |WINDOW_CLIENTCOORDS )
   Local PScrollPanel1_Type:TScrollPanel = CreateScrollPanel:TScrollPanel( 17,15,366,135,Window1:TGadget,Null )
   Local PScrollPanel1:TGadget = ScrollPanelClient(PScrollPanel1_Type)
      Local Button1:TGadget = CreateButton:TGadget("Button1",52,68,75,23,PScrollPanel1:TGadget,BUTTON_PUSH)
      Local Label1:TGadget = CreateLabel:TGadget("Label1",19,19,80,16,PScrollPanel1:TGadget,Null)
      Local TextField1:TGadget = CreateTextField:TGadget(90,129,80,23,PScrollPanel1:TGadget,Null)
         SetGadgetText( TextField1:TGadget,"TextField1")
      Local BorderPanel1:TGadget = CreatePanel:TGadget(106,168,158,53,PScrollPanel1:TGadget,PANEL_BORDER,"BorderPanel1")
      FitScrollPanelClient( PScrollPanel1_Type )

Repeat
   WaitEvent()
   Select EventID()
      Case EVENT_WINDOWCLOSE
         Select EventSource()
            Case Window1   Window1_WC( Window1:TGadget )
         End Select

      Case EVENT_GADGETACTION
         Select EventSource()
            Case Button1   Button1_GA( Button1:TGadget )
            Case TextField1   TextField1_GA( TextField1:TGadget )
         End Select

   End Select
Forever

Function Window1_WC( Window:TGadget )
   DebugLog "Window Window1 wants to be closed"
   End
End Function

Function Button1_GA( Button:TGadget )
   DebugLog "Button Button1 was pressed"
   
End Function

Function TextField1_GA( TextField:TGadget )
   DebugLog "TextField TextField1 was modified"
   DebugLog "Text = "+ TextFieldText$( TextField:TGadget )
   
End Function

Logic Gui Professional a Gui Designer for MaxGui

das wurgel

BeitragDi, Nov 01, 2011 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Beispielcode funktioniert bei mir und ich meine eigentlich, ich hab das genauso gemacht. Ich hab zwar den alten Code nicht mehr, aber dort scheint in der Methode QueryResize in der Zeile
Code: [AUSKLAPPEN]
If parent And GetParent(hwnd) = parent.Query(QUERY_HWND_CLIENT) And TWindowsGadget(parent).hdwpStruct Then

"GetParent(hwnd) = parent.Query(QUERY_HWND_CLIENT)" True gewesen zu sein.
Ich weis aber nicht was das zu bedeuten hat und wie das mit meiner Programmierweise im Zusammenhang steht.
1 ist ungefähr 3
 

jsp

BeitragMi, Nov 02, 2011 0:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Na Hauptsache es funktioniert jetzt für dich Smile

Warum das vorher nicht wollte, k.a. aber deine Beispielzeile sieht ein wenig unnötig kompliziert aus.
Logic Gui Professional a Gui Designer for MaxGui

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group