Seite 2 von 2

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 25.03.2014 21:50
von Andesdaf
Hallo,

@ts: Habe ich eingebaut, ich arbeite aber gerade an einem neuen Beispielcode, der mehr Einstellmöglichkeiten hat
(und englisch ist), damit ich das Modul auch drüben vorstellen kann. Kommt also irgendwann mit dem nächsten Update.

@jamirokwai: man könnte jedem Feld noch einen Wert hinterlegen, der dann mit FieldData() oder so abgerufen und ausgewertet werden könnte.
Oder man schickt ein Event in die Ereignisschleife und diesen Wert dann mit, allerdings hab ich mich mit PostEvent noch nie richtig beschäftigt.

Gruß,
Andesdaf

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 26.03.2014 00:48
von jamirokwai
Hi,

ich habe mal ein ScrollAreaGadget eingebaut, das mit ScrollBarGadgets steuerbar ist. Einfach das Beispiel austauschen. Ist so halb komfortabel.
Leider habe ich es auf die Schnelle nicht hinbekommen, die MouseWheel-Events des Canvasgadgets in 2D-Verschiebungen des ScrollAreaGadgets umzuwandeln. Mein MacBook gibt mir per Trackpad die Möglichkeit horizontal und vertikal zu scrollen. Vielleicht hat ja jemand die rettende Idee ohne API ;-)

Edit: Kommando zurück, BindEvent ist fantastisch... Habe es im Beispiel schon geändert.

Grüßle
J.

Code: Alles auswählen

CompilerIf #PB_Compiler_IsMainFile

  UseModule CvField
  
  Define iMode.i, iSelected.i
  Define NewList Levels.s()
  
  Enumeration
    #Window_0
  EndEnumeration
  
  Enumeration
    #Canvas_0
    #Container_0
    #Frame_0
    #Text_0
    #Text_1
    #Button_0
    #Option_0
    #Option_2
    #Option_1
    #Container_1
    #Container_2
    #Frame_1
    #Frame_2
    #Text_2
    #Text_3
    #Text_4
    #Button_1
    #String_0
    #String_1
    #String_2
    #Checkbox_0
    #Checkbox_1
    #Button_2
    #Button_3
    #Button_4
    #Button_5
    #Button_6
    #Button_7
    #Button_8
    #Combobox_1
    #ScrollArea
    #Vert_Scroll
    #Hori_Scroll
  EndEnumeration
  
  Procedure MyScroll()
    Select EventGadget()
        Case #Vert_Scroll : SetGadgetAttribute(#ScrollArea,#PB_ScrollArea_Y,GetGadgetState(#Vert_Scroll))
        Case #Hori_Scroll : SetGadgetAttribute(#ScrollArea,#PB_ScrollArea_X,GetGadgetState(#Hori_Scroll))
    EndSelect
  EndProcedure

  OpenWindow(#Window_0, x, y, 940, 620, "CanvasField-Beispiel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

  ScrollAreaGadget(#ScrollArea,10,10,600,580,1500,1500)
  CanvasGadget(#Canvas_0, 0, 0, 1500, 1500, #PB_Canvas_ClipMouse)
  CloseGadgetList()
  ScrollBarGadget(#Vert_Scroll,610, 10, 20,580,0,1500,580,#PB_ScrollBar_Vertical)
  ScrollBarGadget(#Hori_Scroll, 10,595,610, 20,0,1500,610)
  
  BindGadgetEvent(#Vert_Scroll, @MyScroll())
  BindGadgetEvent(#Hori_Scroll, @MyScroll())

  ContainerGadget(#Container_0, 640, 10, 290, 260, #PB_Container_BorderLess)
  HideGadget(#Container_0, 1)
  FrameGadget(#Frame_0, 10, 10, 270, 240, "Text")
  TextGadget(#Text_0, 20, 30, 140, 20, "Angezeigter Text:")
  StringGadget(#String_1, 160, 30, 110, 20, "")
  TextGadget(#Text_1, 20, 60, 140, 20, "Schriftstil:")
  ButtonGadget(#Button_0, 160, 60, 110, 20, "ändern...")
  OptionGadget(#Option_0, 20, 90, 90, 20, "linksbündig")
  OptionGadget(#Option_2, 210, 90, 60, 20, "zentriert")
  OptionGadget(#Option_1, 110, 90, 90, 20, "rechtsbündig")
  CheckBoxGadget(#Checkbox_1, 20, 120, 140, 20, "Zeilenumbruch")
  CloseGadgetList()
  ContainerGadget(#Container_1, 640, 10, 290, 260)
  HideGadget(#Container_1, 1)
  FrameGadget(#Frame_1, 10, 10, 270, 240, "Bild")
  TextGadget(#Text_2, 20, 30, 130, 20, "Pfad:")
  ButtonGadget(#Button_1, 160, 60, 110, 20, "ändern...")
  StringGadget(#String_0, 160, 30, 110, 20, "")
  CheckBoxGadget(#Checkbox_0, 20, 90, 250, 20, "Seitenverhältnis beibehalten")
  CloseGadgetList()
  ContainerGadget(#Container_2, 640, 280, 290, 200)
  FrameGadget(#Frame_2, 10, 10, 270, 180, "Ebene")
  TextGadget(#Text_3, 20, 30, 130, 20, "Hintergrundbild:")
  ButtonGadget(#Button_5, 160, 60, 110, 20, "ändern...")
  StringGadget(#String_2, 160, 30, 110, 20, "")
  TextGadget(#Text_4, 20, 90, 130, 20, "Hintergrundfarbe:")
  ButtonGadget(#Button_6, 160, 90, 110, 20, "ändern...")
  CloseGadgetList()
  ButtonGadget(#Button_7, 640, 490, 140, 30, "Speichern")
  ButtonGadget(#Button_8, 790, 490, 140, 30, "Laden")
  ComboBoxGadget(#Combobox_1, 640, 530, 140, 30)
    AddGadgetItem(#Combobox_1, -1, "Main")
    SetGadgetState(#Combobox_1, 0)
  ButtonGadget(#Button_4, 790, 530, 140, 30, "Neue Ebene")
  ButtonGadget(#Button_2, 640, 570, 140, 30, "Neuer Text")
  ButtonGadget(#Button_3, 790, 570, 140, 30, "Neues Bild")
  
  AddLevel("Main", #Canvas_0)
  LevelColor(#COLOR_BACK, $FFFFFF)
  
  AddField(#TYPE_TEXT, 40, 30, #PB_Ignore, #PB_Ignore)
  FieldText("InitText")
  Redraw()
  
  CreatePopupMenu(0)
    MenuItem(0, "Löschen")
    MenuBar()
    MenuItem(1, "eine Ebene nach oben")
    MenuItem(2, "eine Ebene nach unten")
    MenuItem(3, "ganz nach oben")
    MenuItem(4, "ganz nach unten")
    MenuBar()
    MenuItem(5, "horizontal ausrichten")
    MenuItem(6, "vertikal ausreichten")
    MenuItem(7, "linke Kante ausrichten")
    MenuItem(8, "rechte Kante ausrichten")
    MenuItem(9, "obere Kante ausrichten")
    MenuItem(10,"untere Kante ausrichten")
  
  
  Repeat
    Define Event = WaitWindowEvent()
    
    Select Event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Canvas_0
            Select EventType()
              Case #PB_EventType_LeftButtonDown
                Select GetMousePosition()
                  Case #POS_BORDER
                    MoveField(#MODE_BEGIN)
                    iMode = #POS_BORDER
                  Case #POS_HBOTTOM
                    ResizeField(#POS_HBOTTOM, #MODE_BEGIN)
                    iMode = #POS_HBOTTOM
                  Case #POS_HMIDDLE
                    ResizeField(#POS_HMIDDLE, #MODE_BEGIN)
                    iMode = #POS_HMIDDLE
                  Case #POS_HRIGHT
                    ResizeField(#POS_HRIGHT, #MODE_BEGIN)
                    iMode = #POS_HRIGHT
                EndSelect
                
              Case #PB_EventType_LeftButtonUp
                If iMode = #POS_BORDER
                  MoveField(#MODE_END)
                  iMode = 0
                ElseIf iMode = #POS_HBOTTOM
                  ResizeField(#POS_HBOTTOM, #MODE_END)
                  iMode = 0
                ElseIf iMode = #POS_HMIDDLE
                  ResizeField(#POS_HMIDDLE, #MODE_END)
                  iMode = 0
                ElseIf iMode = #POS_HRIGHT
                  ResizeField(#POS_HRIGHT, #MODE_END)
                  iMode = 0
                EndIf
                
                HideGadget(#Container_0, 1)
                HideGadget(#Container_1, 1)
                SetGadgetText(#String_1, "")
                SetGadgetText(#String_0, "")
                
                If GetMousePosition() = #POS_CENTER
                  If SelectField(-1)
                    SelectField(0)
                  Else
                    SelectField(1)
                  EndIf
                  If SelectedFieldCount() = 1
                    SetSelectedField()
                    Select FieldType()
                      Case #TYPE_TEXT
                        HideGadget(#Container_0, 0)
                        SetGadgetText(#String_1, FieldText())
                        SetGadgetState(#Checkbox_1, FieldTextWordwrap())
                      Case #TYPE_IMAGE
                        HideGadget(#Container_1, 0)
                        SetGadgetText(#String_0, FieldImage())
                        SetGadgetState(#Checkbox_0, FieldImageConstant())
                    EndSelect
                  EndIf
                ElseIf GetMousePosition() = #POS_NONE
                  SelectField(2)
                EndIf
                
              Case #PB_EventType_MouseMove
                If iMode = #POS_BORDER
                  MoveField(#MODE_DRAW)
                ElseIf iMode = #POS_HBOTTOM
                  ResizeField(#POS_HBOTTOM, #MODE_DRAW)
                ElseIf iMode = #POS_HMIDDLE
                  ResizeField(#POS_HMIDDLE, #MODE_DRAW)
                ElseIf iMode = #POS_HRIGHT
                  ResizeField(#POS_HRIGHT, #MODE_DRAW)
                EndIf

              Case #PB_EventType_RightClick
                If GetMousePosition() = #POS_CENTER
                  If SelectField(-1)
                    DisplayPopupMenu(0, WindowID(#Window_0))
                  EndIf
                EndIf
                
            EndSelect
            
          Case #String_1
            FieldText(GetGadgetText(#String_1))
            Redraw()
          
          Case #Button_0
            FontRequester(FieldFontName(), FieldFontSize(), #PB_FontRequester_Effects, FieldFontColor(), FieldFontStyle())
            FieldFontColor(SelectedFontColor())
            FieldFontName(SelectedFontName())
            FieldFontSize(SelectedFontSize())
            FieldFontStyle(SelectedFontStyle())
            Redraw()
          
          Case #Button_1
            FieldImage(OpenFileRequester("Bild wählen", GetHomeDirectory(), "*.*", 0))
            Redraw()
            
          Case #Button_2
            AddField(#TYPE_TEXT, 0, 0, #PB_Ignore, #PB_Ignore)
            SelectField(2)
            SelectField()
            FieldText("Neuer Text")
            Redraw()
            
          Case #Button_3
            AddField(#TYPE_IMAGE, 0, 0, #PB_Ignore, #PB_Ignore)
            SelectField(2)
            SelectField()
            FieldImage(#PB_Compiler_Home + "Examples/Sources/Data/PureBasicLogo.bmp")
            Redraw()
            
          Case #Button_4
            AddLevel(InputRequester("Neue Ebene", "Namen eingeben:", ""), #Canvas_0)
            LevelColor(#COLOR_BACK, $FFFFFF)
            GetLevels(Levels())
            ClearGadgetItems(#Combobox_1)
            ForEach Levels()
              AddGadgetItem(#Combobox_1, -1, Levels())
            Next
            SetGadgetState(#Combobox_1, 0)
            
          Case #Button_5
            LevelBackImage(OpenFileRequester("Bild wählen", GetHomeDirectory(), "*.*", 0))
            Redraw()
           
          Case #Button_6
            LevelColor(#COLOR_BACK, ColorRequester(LevelColor(#COLOR_BACK)))
            Redraw()
            
          Case #Button_7
            SaveLevelset(SaveFileRequester("als XML speichern", GetHomeDirectory(), "xml|*.xml", 0))
         
          Case #Button_8
            LoadLevelset(OpenFileRequester("aus XML laden", GetHomeDirectory(), "xml|*.xml", 0))
            GetLevels(Levels())
            ClearGadgetItems(#Combobox_1)
            ForEach Levels()
              AddGadgetItem(#Combobox_1, -1, Levels())
            Next
            SetGadgetState(#Combobox_1, 0)
            Redraw()
         
          Case #Option_0
            FieldTextAlign(#TEXT_LEFT)
            Redraw()
            
          Case #Option_1
            FieldTextAlign(#TEXT_RIGHT)
            Redraw()
            
          Case #Option_2
            FieldTextAlign(#TEXT_CENTER)
            Redraw()
            
          Case #Checkbox_0
            FieldImageConstant(GetGadgetState(#Checkbox_0))
            Redraw()
            
          Case #Checkbox_1
            FieldTextWordwrap(GetGadgetState(#Checkbox_1))
            Redraw()
            
          Case #Combobox_1
            SetCurrentLevel(GetGadgetText(#Combobox_1))
            SetGadgetText(#String_2, LevelBackImage())
            Redraw()
            
        EndSelect
        
      Case #PB_Event_Menu
        Select EventMenu()
           
           Case 0
             DeleteField()
             HideGadget(#Container_0, 1)
             HideGadget(#Container_1, 1)
             Redraw()
           Case 1 : SetFieldStack(#STACK_UP)     : Redraw()
           Case 2 : SetFieldStack(#STACK_DOWN)   : Redraw()
           Case 3 : SetFieldStack(#STACK_TOP)    : Redraw()
           Case 4 : SetFieldStack(#STACK_BOTTOM) : Redraw()
           Case 5 : ArrangeField(#ARRANGE_HORIZONTAL)
           Case 6 : ArrangeField(#ARRANGE_VERTICAL)
           Case 7 : ArrangeField(#ARRANGE_LEFT) 
           Case 8 : ArrangeField(#ARRANGE_RIGHT)
           Case 9 : ArrangeField(#ARRANGE_UPPER)
           Case 10: ArrangeField(#ARRANGE_LOWER)
           
        EndSelect
        
    EndSelect
    
  Until Event = #PB_Event_CloseWindow
  
UnuseModule CvField
CompilerEndIf

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 15.06.2014 19:38
von Andesdaf
Hallo jamirokwai, danke für dein Beispiel. Ich arbeite jetzt wieder an der Sache,
sodass bald Updates folgen werden.

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 03.07.2014 13:19
von Andesdaf
So, eine neue Version ist im ersten Post verfügbar.

Code: Alles auswählen

v1.03
- Hinzugefügt: Neues Beispiel, das Zugriff auf alle Einstellungsmöglichkeiten bietet

- Geändert: DeleteField unterstützt auch das gleichzeitige Löschen mehrerer Felder
- Geändert: DeleteLevel, DeleteField und AddField prüfen vorher, ob ein Level vorhanden ist

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 03.07.2014 17:23
von ts-soft
Sehr schön, aber leider nicht mehr kompatible zu PB5.30!
Der Befehl "CreateXMLNode()" scheint geändert worden zu sein. Jedenfalls fehlt ein optionaler Parameter.

Gruß
Thomas

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 04.07.2014 09:55
von Andesdaf
Danke für den Hinweis. Ich habe den Code entsprechend korrigiert.

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 04.07.2014 12:05
von ts-soft
Naja, jetzt läufts nur noch unter 5.30 :D

Du solltest es schon so anpassen, das es unter beiden Versionen läuft, also mit CompilerIf:

Code: Alles auswählen

CompilerIf #PB_Compiler_Version < 530
; code für LTS Version
CompilerElse
; code für aktuelle Version
CompilerEndif
Also die LTS Version nicht mehr zu unterstützten halte ich für eine denkbar schlechte Idee.
(hoffentlich kommen da nicht noch mehr solche Änderungen)

Gruß
Thomas

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 16.08.2014 18:52
von Andesdaf
es gibt noch Probleme, wenn man versucht, zwei Canvas-Gadgets mit CvField zu benutzen
oder sich die Gadgetnummer des Canvas zwischendurch ändert und man auf gespeicherte
Levelsets zurückgreift. Mit dieser Funktion sollte das Problem erst einmal behoben werden,
ich überlege mir dann noch ein besseres Konzept.

Aktualisiert im ersten Post.

Code: Alles auswählen

v1.05

- Hinzugefügt: LevelGadet(), für Setzen oder Rückgabe des Canvas-Gadgets, auf dem sich das Level befindet

- Geändert: SetCurrentLevel() umbenannt zu CurrentLevel(), ist jetzt bezogen auf das jeweilige Canvas-Gadget, unterstützt die Rückgabe des gerade aktiven Levels
- Geändert: die Ausgabe von GetLevels() lässt sich nach Canvas-Gadget einschränken
- Geändert: LevelBackImage() mit Leerstring als Parameter entfernt das aktuelle Hintergrundbild
- Geändert: Redraw() wird verlassen, wenn kein gültiger Ausgabekanal vorhanden ist

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 24.11.2015 17:37
von GPI
Ein kleiner Bug ist in code: Wenn man ein Hintergrund hinzufügen will und bei der Dateiauswahl abbrechen klickt, dann schmiert das Programm hier ab:

Code: Alles auswählen

        If iFoundCount <= 1
          FreeImage(l()\iBackImageID)
        EndIf
kann man recht einfach durch

Code: Alles auswählen

        If iFoundCount <= 1 And l()\iBackImageID
          FreeImage(l()\iBackImageID)
        EndIf
korrigieren.

Wird in CodeArchiv unter Gadgets/CanvasGadget/CvField_Place_Text_and_pictures_inside_gadget.pbi auftauchen.

Re: CvField - Modul für Text- und Bildfelder im CanvasGadget

Verfasst: 24.11.2015 20:58
von Andesdaf
danke für den Bugreport, ich spiele aber schon eine zeitlang mit dem Gedanken
einer Version 2 (mit VectorDrawing-Library), sodass hier erst mal weiter keine großen
Änderungen zu erwarten sind.