CvField - Modul für Text- und Bildfelder im CanvasGadget
Re: CvField - Modul für Text- und Bildfelder im CanvasGadget
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
@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
Win11 x64 | PB 6.10 (x64)
-
- Beiträge: 65
- Registriert: 02.06.2008 16:10
Re: CvField - Modul für Text- und Bildfelder im CanvasGadget
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.
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
Hallo jamirokwai, danke für dein Beispiel. Ich arbeite jetzt wieder an der Sache,
sodass bald Updates folgen werden.
sodass bald Updates folgen werden.
Win11 x64 | PB 6.10 (x64)
Re: CvField - Modul für Text- und Bildfelder im CanvasGadget
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
Win11 x64 | PB 6.10 (x64)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: CvField - Modul für Text- und Bildfelder im CanvasGadget
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
Der Befehl "CreateXMLNode()" scheint geändert worden zu sein. Jedenfalls fehlt ein optionaler Parameter.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: CvField - Modul für Text- und Bildfelder im CanvasGadget
Danke für den Hinweis. Ich habe den Code entsprechend korrigiert.
Win11 x64 | PB 6.10 (x64)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: CvField - Modul für Text- und Bildfelder im CanvasGadget
Naja, jetzt läufts nur noch unter 5.30
Du solltest es schon so anpassen, das es unter beiden Versionen läuft, also mit CompilerIf:
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
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
(hoffentlich kommen da nicht noch mehr solche Änderungen)
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: CvField - Modul für Text- und Bildfelder im CanvasGadget
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.
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
Win11 x64 | PB 6.10 (x64)
Re: CvField - Modul für Text- und Bildfelder im CanvasGadget
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:
kann man recht einfach durch
korrigieren.
Wird in CodeArchiv unter Gadgets/CanvasGadget/CvField_Place_Text_and_pictures_inside_gadget.pbi auftauchen.
Code: Alles auswählen
If iFoundCount <= 1
FreeImage(l()\iBackImageID)
EndIf
Code: Alles auswählen
If iFoundCount <= 1 And l()\iBackImageID
FreeImage(l()\iBackImageID)
EndIf
Wird in CodeArchiv unter Gadgets/CanvasGadget/CvField_Place_Text_and_pictures_inside_gadget.pbi auftauchen.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: CvField - Modul für Text- und Bildfelder im CanvasGadget
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.
einer Version 2 (mit VectorDrawing-Library), sodass hier erst mal weiter keine großen
Änderungen zu erwarten sind.
Win11 x64 | PB 6.10 (x64)