IceDesign GUI-Designer
Re: IceDesign GUI-Designer
Super! Eine gute Lösung für das DateGadget mittels der Konstante #DateGadgetTheme! Und danke auch für die Korrektur des ComboBoxGadgets!
Aber ich habe noch ein weiteres Problem gefunden. Beim Skalieren des Imagegadgets wird der Fensterhintergrund nicht aktualisiert, es bleiben unschöne Grafikreste übrig...
https://ibb.co/sR0X04P
Aber ich habe noch ein weiteres Problem gefunden. Beim Skalieren des Imagegadgets wird der Fensterhintergrund nicht aktualisiert, es bleiben unschöne Grafikreste übrig...
https://ibb.co/sR0X04P
Re: IceDesign GUI-Designer
Noch eine Sache zum Imagegadget: Es wäre auch schön, wenn man eine Option hätte, um beim Skalieren ein korrektes Seitenverhältnis einzuhalten.
Etwa so:
Die Skalierungsroutine habe ich hier entnommen:
https://www.purebasic.fr/english/viewto ... 51#p485651
Etwa so:
Code: Alles auswählen
;- Top
; -----------------------------------------------------------------------------
; Name: Image Demo
; Description: Demonstration of correct aspect ration scaling
; Author: MAQ
; Date: 2024-03-23
; Version: 0.1
; PB-Version: 6.03
; OS: Windows
; Credit: Scaling Routine 2016 (c) Lunasole
; Forum:
; Created by: IceDesign
; -----------------------------------------------------------------------------
EnableExplicit
;- Enumerations
Enumeration Window
#Window_0
EndEnumeration
Enumeration Gadgets
#Gadget_0_Img_1
#Gadget_0_Check_Correct_Aspect_Ratio
EndEnumeration
Enumeration Image
#Imag_0_PureBasicLogo
EndEnumeration
Structure GadgetImages
Image.i
PressedImage.i
Width.i
Height.i
EndStructure
Global Aspect.b = #False
;- Load Images
CatchImage(#Imag_0_PureBasicLogo, ?Imag_0_PureBasicLogo)
;- Declare
Declare ScaleProportional (*res_w.Integer, *res_h.Integer, from_width, from_heigh, to_width = 0, to_heigh = 0)
Declare ResizeGadgetImage(Gadget, OriginalImage, OriginalPressedImage = #PB_Ignore)
Declare Resize_Window_0()
Declare Open_Window_0(X = 0, Y = 0, Width = 440, Height = 160)
Procedure ScaleProportional (*res_w.Integer, *res_h.Integer, from_width, from_heigh, to_width = 0, to_heigh = 0)
Protected.d hMod
If Not to_width : to_width = *res_w\i : EndIf : *res_w\i = to_width
If Not to_heigh : to_heigh = *res_h\i : EndIf : *res_h\i = to_heigh
If from_heigh > to_heigh Or from_width > to_width
hMod = from_width / to_width
If Not Round(from_heigh / hMod, #PB_Round_Nearest) > to_heigh And Not Round(from_width / hMod, #PB_Round_Nearest) > to_width
Else
hMod = from_heigh / to_heigh
EndIf
*res_w\i = from_width / hMod
*res_h\i = from_heigh / hMod
ElseIf from_heigh < to_heigh Or from_width < to_width
hMod = to_width / from_width
If Not Round(from_heigh * hMod, #PB_Round_Nearest) > to_heigh And Not Round(from_width * hMod, #PB_Round_Nearest) > to_width
Else
hMod = to_heigh / from_heigh
EndIf
*res_w\i = from_width * hMod
*res_h\i = from_heigh * hMod
EndIf
EndProcedure
Procedure ResizeGadgetImage(Gadget, OriginalImage, OriginalPressedImage = #PB_Ignore)
Protected Image, Width, Height
Static NewMap GadgetImage.GadgetImages()
If IsGadget(Gadget) And IsImage(OriginalImage)
Width = DesktopScaledX(GadgetWidth(Gadget)) : Height = DesktopScaledY(GadgetHeight(Gadget))
If Width > 0 And Height > 0
If GadgetImage(Str(Gadget))\Width <> Width Or GadgetImage(Str(Gadget))\Height <> Height
GadgetImage()\Width = Width : GadgetImage()\Height = Height
Image = CopyImage(OriginalImage, #PB_Any)
If Image
If Aspect = #True
ScaleProportional(@Width, @Height, ImageWidth(Image), ImageHeight(Image), Width, Height)
EndIf
ResizeImage(Image, Width, Height)
Select GadgetType(Gadget)
Case #PB_GadgetType_ButtonImage
SetGadgetAttribute(Gadget, #PB_Button_Image, ImageID(Image))
Case #PB_GadgetType_Image
SetGadgetState(Gadget, ImageID(Image))
EndSelect
If GadgetImage()\Image And IsImage(GadgetImage()\Image)
FreeImage(GadgetImage()\Image)
EndIf
GadgetImage()\Image = Image
EndIf
If GadgetType(Gadget) = #PB_GadgetType_ButtonImage And IsImage(OriginalPressedImage)
Image = CopyImage(OriginalPressedImage, #PB_Any)
If Image
ResizeImage(Image, Width, Height)
SetGadgetAttribute(Gadget, #PB_Button_PressedImage, ImageID(Image))
If GadgetImage()\PressedImage And IsImage(GadgetImage()\PressedImage)
FreeImage(GadgetImage()\PressedImage)
EndIf
GadgetImage()\PressedImage = Image
EndIf
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure Resize_Window_0()
Protected Window_0_WidthIni = 440, Window_0_HeightIni = 160
Protected ScaleX.f, ScaleY.f
ScaleX = WindowWidth(#Window_0) / Window_0_WidthIni : ScaleY = WindowHeight(#Window_0) / Window_0_HeightIni
ResizeGadget(#Gadget_0_Img_1, WindowWidth(#Window_0)/2 - (ScaleX * 381)/2, ScaleY * 30, ScaleX * 381, ScaleY * 68)
ResizeGadgetImage(#Gadget_0_Img_1, #Imag_0_PureBasicLogo)
ResizeGadget(#Gadget_0_Check_Correct_Aspect_Ratio, WindowWidth(#Window_0)/2 - (ScaleX * 140)/2, ScaleY * 120, ScaleX * 140, ScaleY * 20)
EndProcedure
Procedure Open_Window_0(X = 0, Y = 0, Width = 440, Height = 160)
If OpenWindow(#Window_0, X, Y, Width, Height, "Image Demo", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
ImageGadget(#Gadget_0_Img_1, 30, 30, 381, 68, ImageID(#Imag_0_PureBasicLogo))
CheckBoxGadget(#Gadget_0_Check_Correct_Aspect_Ratio, 150, 120, 140, 20, "Correct Aspect Ratio")
BindEvent(#PB_Event_SizeWindow, @Resize_Window_0(), #Window_0)
PostEvent(#PB_Event_SizeWindow, #Window_0, 0)
WindowBounds(#Window_0, 440, 160, #PB_Ignore, #PB_Ignore)
ProcedureReturn #True
EndIf
EndProcedure
;- Main Program
If Open_Window_0()
;- Event Loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
;-> Event Gadget
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget_0_Check_Correct_Aspect_Ratio
If GetGadgetState(#Gadget_0_Check_Correct_Aspect_Ratio) = #True
Aspect = #True
Else
Aspect = #False
EndIf
EndSelect
EndSelect
ForEver
EndIf
;- DataSection
DataSection
Imag_0_PureBasicLogo: : IncludeBinary #PB_Compiler_Home + "\Examples\Sources\Data\PureBasicLogo.bmp"
EndDataSection
https://www.purebasic.fr/english/viewto ... 51#p485651
Re: IceDesign GUI-Designer
IceDesign wurde auf Version 2.1.0 aktualisiert
- WebViewGadget hinzugefügt.
- KeepWindowsSize: Option in den Einstellungen hinzugefügt, um die Position, die Größe und den Status des Fensters (Normal, Minimiert, Maximiert) zwischen den Ausführungen für das generierte Formular beizubehalten.
- Optionen in den Einstellungen für die Sortierung der Aufzählungen und für die Anzahl der Aufzählungen pro Zeile hinzugefügt, um ein zu starkes Scrollen zu verhindern.
Beispiel hier mit 6 Aufzählungen, die pro Zeile sortiert werden:Code: Alles auswählen
Enumeration Gadgets #Check_1 : #Check_2 : #Check_3 : #Check_4 : #Check_5 : #Check_6 #String_1 : #String_2 : #String_3 : #String_4 : #String_5 : #String_6 #Txt_1 : #Txt_2 : #Txt_3 : #Txt_4 : #Txt_5 : #Txt_6 EndEnumeration ;oder wenn Variablen verwendet werden. Global Check_1, Check_2, Check_3, Check_4, Check_5, Check_6 Global String_1, String_2, String_3, String_4, String_5, String_6 Global Txt_1, Txt_2, Txt_3, Txt_4, Txt_5, Txt_6
- Tabreihenfolge : Für alle Gadgets, die hervorgehoben werden können, wurde die Eigenschaft "Tabulatorreihenfolge" hinzugefügt.
Der Wert für die Tabulatorreihenfolge ist frei wählbar, es wird nicht überprüft, ob dieselbe Nummer bereits verwendet wird, und es gibt keine Neunummerierung.
Die Tabulatorreihenfolge wird nach dieser Nummer sortiert, dann nach der Y-Position und dann nach der X-Position.
Zur Information: Es wäre ziemlich schwierig, die Tabulatorreihenfolge auszuwählen und im Designbereich anzuzeigen, da im Multi-Level-Modus nur die Couyrant-Ebene aktiv ist und in IceDesign gezeichnet wird.
Die Tabulatorreihenfolge wird mit dem Makro SetTabOrder(#Gadget1) festgelegt: SetTabOrder(#Gadget2).
Und die Reihenfolge, in der die Gadgets erstellt werden, bleibt unverändert (Ebene,Tabulator,Y- und dann X-Position). Dadurch bleiben die TextGadgets neben den Strings... und das Öffnen und Schließen der Container entfällt.
Re: IceDesign GUI-Designer
Danke für das Update.
Die IceDesign_x86.exe startet einwandfrei.
Die IceDesign.exe bringt bei mir leider einen Fehler.
SilkTheme.zip Not found in the current directory. Exit now.
Ich benutze Purebasic 6.10 32 Bit und 64 Bit.
Keine Ahnung ob der Fehler bei mir oder im IceDesign liegt. Alte Versionen gehen.
Viele Grüße
Thomas
Die IceDesign_x86.exe startet einwandfrei.
Die IceDesign.exe bringt bei mir leider einen Fehler.
SilkTheme.zip Not found in the current directory. Exit now.
Ich benutze Purebasic 6.10 32 Bit und 64 Bit.
Keine Ahnung ob der Fehler bei mir oder im IceDesign liegt. Alte Versionen gehen.
Viele Grüße
Thomas
Win11 Pro
PureBasic 6.10 LTS
PureBasic 6.10 LTS
Re: IceDesign GUI-Designer
Hallo Thomas,
Scheint hier gut zu funktionieren, es keine Änderungen an diesem Teil.
Beim Start sollte er SilkTheme_Light.zip in denselben Ordner extrahieren. Überprüfe, ob du Schreibrechte für diesen Ordner hast oder vielleicht das Antivirenprogramm.
Scheint hier gut zu funktionieren, es keine Änderungen an diesem Teil.
Beim Start sollte er SilkTheme_Light.zip in denselben Ordner extrahieren. Überprüfe, ob du Schreibrechte für diesen Ordner hast oder vielleicht das Antivirenprogramm.
Re: IceDesign GUI-Designer
Danke für die Info mit den Schreibrechten, das war der Fehler.
Klappt jetzt einwandfrei.
Vielen dank.
Thomas
Klappt jetzt einwandfrei.
Vielen dank.
Thomas
Win11 Pro
PureBasic 6.10 LTS
PureBasic 6.10 LTS
Re: IceDesign GUI-Designer
IceDesign wurde auf Version 2.1.4 aktualisiert
Es ist möglich, die Position von geklonten oder kopierten Gadgets anzupassen, wobei die Höhe und/oder Breite des/der duplizierten Gadgets und ein X/Y-Versatz berücksichtigt werden. Es funktioniert auch mit Mehrfachauswahlen, die Höhe/Breite ist die der Auswahl. Siehe Bildschirm unten

Zusätzlich zu "Fenstername hinzufügen" wurden Präfixe und Suffixe (vorher ".i" und nicht wirklich nützlich) geändert und sind nun sowohl für Variablen als auch für Konstanten verfügbar. Siehe Bildschirm oben
Sie können sie entweder kombinieren oder nur eine von ihnen verwenden.
Nach dem 1. Durchlauf sind die Standard-Kurznamen der Steuerelemente nun in IceDesign.ini anpassbar. Zu verwenden mit der Option "Use Short Name for Controls" in den Einstellungen.
IceDesign.ini
IceDesign ist jetzt mit PB 6.10 und VS Linker kompiliert

Es ist möglich, die Position von geklonten oder kopierten Gadgets anzupassen, wobei die Höhe und/oder Breite des/der duplizierten Gadgets und ein X/Y-Versatz berücksichtigt werden. Es funktioniert auch mit Mehrfachauswahlen, die Höhe/Breite ist die der Auswahl. Siehe Bildschirm unten

Zusätzlich zu "Fenstername hinzufügen" wurden Präfixe und Suffixe (vorher ".i" und nicht wirklich nützlich) geändert und sind nun sowohl für Variablen als auch für Konstanten verfügbar. Siehe Bildschirm oben
Sie können sie entweder kombinieren oder nur eine von ihnen verwenden.
Nach dem 1. Durchlauf sind die Standard-Kurznamen der Steuerelemente nun in IceDesign.ini anpassbar. Zu verwenden mit der Option "Use Short Name for Controls" in den Einstellungen.
IceDesign.ini
Code: Alles auswählen
[ControlsShortName]
Button = Bouton
CheckBox = Häkchen
...

Re: IceDesign GUI-Designer
IceDesign wurde auf Version 2.1.6 aktualisiert
Deutsche Sprache hinzugefügt, Dank an SiRprise
Einige Verbesserungen, Korrekturen in ObjectTheme
Fehler in den Namen der Menüpunkte behoben
Deutsche Sprache hinzugefügt, Dank an SiRprise

Einige Verbesserungen, Korrekturen in ObjectTheme
Fehler in den Namen der Menüpunkte behoben
Re: IceDesign GUI-Designer
IceDesign wurde auf Version 2.1.7 aktualisiert
- Korrigieren Sie die Namen der Konstanten (oder Variablen) für Schriftarten und Bilder, indem Sie nur die erlaubten Zeichen beibehalten, z. B:
Für die Schriftart: @Mx437 HP 100LX 6x8, 20, Bold, lautet der Name der Konstante: #Font_Mx437_HP_100LX_6x8_20_B.
und der Ladevorgang ist: LoadFont(#Font_Mx437_HP_100LX_6x8_20_B, "@Mx437 HP 100LX 6x8", 20, #PB_Font_Bold).
- Ändern Sie den für das Hintergrundbild erzeugten Code in den Einstellungen, indem Sie jetzt:
SetClassLongPtr, GCL_HBRBACKGROUND anstelle eines deaktivierten Hintergrundbildes.
- Die Variablen Brush_Background und Quit (zum Verlassen der Schleife) verwenden den kurzen Namen des Fensters, Präfix und Suffix, wie es auch bei anderen Konstanten und Variablen der Fall ist.
Re: IceDesign GUI-Designer
IceDesign wurde auf Version 2.2.0 aktualisiert
Rückgängig/Wiederherstellen-Funktionen hinzufügen
Das stand schon eine Weile in meinem Todo, aber ich konnte nicht sehen, wie man es einfach machen kann, angesichts der Anzahl der Rückgängig-Aktionen, die zu bewältigen sind.
Um dies zu umgehen, wird die komplette IceDesign-Liste der Gadgets in einer Undo/Redo-Liste für jede Änderung gespeichert.
Beim Rückgängigmachen/Wiederherstellen werden die vorherigen oder nächsten Listen neu geladen und komplett neu angezeigt (die aktuelle Auswahl geht verloren).
Es ist also nicht wirklich unmittelbar, da das Neuladen ein wenig Zeit in Anspruch nimmt, aber es erfüllt seinen Zweck
Um zu verhindern, dass die Undo/Redo-Liste zu groß wird, kann die maximale Anzahl der Undo-Vorgänge in den Einstellungen geändert werden. Ich habe sie standardmäßig auf 99 gesetzt, aber sie könnte höher sein.
Rückgängig/Wiederherstellen-Funktionen hinzufügen
Das stand schon eine Weile in meinem Todo, aber ich konnte nicht sehen, wie man es einfach machen kann, angesichts der Anzahl der Rückgängig-Aktionen, die zu bewältigen sind.
Um dies zu umgehen, wird die komplette IceDesign-Liste der Gadgets in einer Undo/Redo-Liste für jede Änderung gespeichert.
Beim Rückgängigmachen/Wiederherstellen werden die vorherigen oder nächsten Listen neu geladen und komplett neu angezeigt (die aktuelle Auswahl geht verloren).
Es ist also nicht wirklich unmittelbar, da das Neuladen ein wenig Zeit in Anspruch nimmt, aber es erfüllt seinen Zweck

Um zu verhindern, dass die Undo/Redo-Liste zu groß wird, kann die maximale Anzahl der Undo-Vorgänge in den Einstellungen geändert werden. Ich habe sie standardmäßig auf 99 gesetzt, aber sie könnte höher sein.