GadgetDemo (seen on screenshots page at www.purebasic.com)
Posted: Thu May 01, 2003 10:24 am
As some user asked for the code of this example on german forum, I will also post it here...
(Full archive including pics, icons, html is available from http://www.purebasic.com/download.php3
The code is in german only, but should also be readable for english speakers....

(Full archive including pics, icons, html is available from http://www.purebasic.com/download.php3
The code is in german only, but should also be readable for english speakers....

Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - Gadget example file
;
; (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;
#WindowWidth = 700
#WindowHeight = 530
; Erstellen des gewünschten Fensters
If OpenWindow(0, 100, 120, #WindowWidth, #WindowHeight, #PB_Window_MinimizeGadget, "PureBasic - Gadget Demonstration (c) 2003 by Fantaisie Software")
; Laden der verwendeten Grafiken
LoadImage(0, "Gfx\PureBasic.bmp")
LoadImage(1, "Gfx\Map.bmp")
LoadImage(2, "Gfx\Drive.bmp")
LoadImage(3, "Gfx\File.bmp")
LoadImage(4, "Gfx\New.ico")
LoadImage(5, "Gfx\Save.ico")
; Erstellen der ToolBar-Leiste
If CreateToolBar(0, WindowID())
ToolBarStandardButton(0, #PB_ToolBarIcon_New) : ToolBarToolTip(0, "Neu")
ToolBarStandardButton(1, #PB_ToolBarIcon_Open) : ToolBarToolTip(0, "Öffnen")
ToolBarStandardButton(2, #PB_ToolBarIcon_Save) : ToolBarToolTip(0, "Speichern")
ToolBarSeparator()
ToolBarStandardButton(4, #PB_ToolBarIcon_Print) : ToolBarToolTip(4, "Drucken")
ToolBarStandardButton(10, #PB_ToolBarIcon_Find) : ToolBarToolTip(10, "Suchen")
ToolBarSeparator()
ToolBarImageButton(11, UseImage(4))
ToolBarImageButton(12, UseImage(5))
EndIf
; Erstellen des Menüs
If CreateMenu(0, WindowID()) ; ermittelt die eindeutige WindowID und darauf die neue Menüliste
MenuTitle("Projekt")
MenuItem(0, "Neu")
MenuItem(1, "Öffnen")
MenuItem(2, "Speichern")
MenuItem(3, "Speichern als")
MenuBar()
MenuItem(4, "Drucken")
MenuBar()
MenuItem(5, "Quit")
MenuTitle("Bearbeiten")
MenuItem(6, "Rückgängig")
MenuItem(7, "Ausschneiden")
MenuItem(8, "Kopieren")
MenuItem(9, "Einfügen")
MenuBar()
MenuItem(10, "Suchen in ...")
MenuTitle("Optionen")
MenuItem(16, "Zeichensatz auswählen")
MenuItem(17, "Farbe auswählen")
MenuBar()
MenuItem(18, "Pfad festlegen")
MenuTitle("Sonstiges")
MenuItem(13, "Aktiviere Untermenü")
OpenSubMenu("Untermenü")
MenuItem(14, "Eintrag 1")
MenuItem(15, "Eintrag 2")
CloseSubMenu()
SetMenuItemState(0,13,1) ; setzt Häkchen vor dem Menüeintrag "Aktiviere Untermenü"
MenuTitle("?")
MenuItem(19, "Über...")
EndIf
; Festlegen der Tastenkürzel (u.a. für Menü-Einträge)
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_Z, 16) ; STRG + Z: Rückgabewert 16 entspricht dem Menüeintrag "Zeichensatz auswählen"
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_F, 17) ; STRG + F: Rückgabewert 17 entspricht dem Menüeintrag "Farbe auswählen"
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_P, 18) ; STRG + P: Rückgabewert 18 entspricht dem Menüeintrag "Pfad festlegen"
AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_I, 19) ; STRG + I: Rückgabewert 19 entspricht dem Menüeintrag "Über..."
AddKeyboardShortcut(0, #PB_Shortcut_F1, 500) ; F1: Legt 500 als Rückgabewert für die "F1"-Taste fest
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 501) ; ÊSC: Legt 501 als Rückgabewert für die "ESC"-Taste fest
; Erstellen der Gadgets
If CreateGadgetList(WindowID()) ; ermittelt die eindeutige WindowID und darauf die neue Gadgetliste
#y=15 ; definiert zusätzlichen Abstand zum Fensterrand wegen der ToolBar-Leiste
ButtonGadget (1, 20,#y+ 20, 80, 24, "Schalter")
GadgetToolTip (1,"Erklärung zum Gadget Schalter")
ButtonImageGadget(2, 20,#y+ 62,100, 83, UseImage(1))
CheckBoxGadget (3, 20,#y+160,120, 24, "Markierungsschalter")
ComboBoxGadget (4, 20,#y+200,130,100)
AddGadgetItem (4,-1,"Element 1")
AddGadgetItem (4,-1,"Element 2")
AddGadgetItem (4,-1,"Element 3")
AddGadgetItem (4,-1,"Element 4")
ButtonGadget (98,155,#y+200, 20, 22, "?")
Frame3DGadget (5, 20,#y+240,150, 40,"Frame3DGadget",0)
IPAddressGadget (6, 20,#y+300,120, 22)
ButtonGadget (97,145,#y+300, 20, 22, "?")
ImageGadget (7, 20,#y+340,168, 35,UseImage(0))
TextGadget (99, 20,#y+395,168, 47,"Gadget Demonstration"+Chr(10)+"(c) 13.04.2003 by Andre Beer"+Chr(10)+"PureBasic Team",#PB_Text_Center|#PB_Text_Border)
ButtonGadget (96, 79,#y+450, 50, 22, "Exit")
ListIconGadget (8,220,#y+ 20,250, 80,"Feld 1",75)
AddGadgetColumn(8, 1, "Feld 2",75)
AddGadgetColumn(8, 2, "Feld 3",75)
AddGadgetItem (8,-1, "Element 1"+Chr(10)+"Spalte 2"+Chr(10)+"Spalte 3")
AddGadgetItem (8,-1, "Element 2"+Chr(10)+"Spalte 2"+Chr(10)+"Spalte 3")
AddGadgetItem (8,-1, "Element 3"+Chr(10)+"Spalte 2"+Chr(10)+"Spalte 3")
AddGadgetItem (8,-1, "Element 4"+Chr(10)+"Spalte 2"+Chr(10)+"Spalte 3")
AddGadgetItem (8,-1, "Element 5"+Chr(10)+"Spalte 2"+Chr(10)+"Spalte 3")
ListViewGadget (9,220,#y+115,250, 80)
For a=1 To 6
AddGadgetItem (9,-1,"Zeile "+Str(a)+" vom Listview")
Next
OptionGadget (10,220,#y+205, 60, 20,"Option 1")
OptionGadget (11,220,#y+223, 60, 20,"Option 2")
OptionGadget (12,220,#y+241, 60, 20,"Option 3")
ButtonGadget (94,220,#y+264, 60, 20,"Info")
TextGadget (95,300,#y+205,170, 60,"",#PB_Text_Border) ; in dieses Textausgabe-Gadget erfolgen später Ausdrucke vom ListView und ListIcon
PanelGadget (13,220,#y+295,250,80)
AddGadgetItem (13,-1,"Panel 1") ; Erstellen der ersten "Seite" des Panel-Gadgets
ButtonGadget(93, 10, 15, 80, 24,"Schalter 1") ; auf dieser Seite können jetzt beliebige weitere Gadgets eingefügt werden
ButtonGadget(92, 95, 15, 80, 24,"Schalter 2")
AddGadgetItem (13,-1,"Panel 2") ; Erstellen der zweiten "Seite" des Panel-Gadgets
ButtonGadget(91, 50, 15, 80, 24,"Schalter 3") ; auf dieser Seite können jetzt beliebige weitere Gadgets eingefügt werden
ButtonGadget(90,135, 15, 80, 24,"Schalter 4")
ClosePanelGadget()
TreeGadget (17,500,#y+ 20,170,150)
For k=0 To 10
AddGadgetItem (17, 0, "Allgemein "+Str(k), UseImage(3))
AddGadgetItem (17, 0, "Verzeichnis "+Str(k), UseImage(2))
OpenTreeGadgetNode(17)
AddGadgetItem(17, 0, "Datei 1", UseImage(3))
AddGadgetItem(17, 0, "Datei 2", UseImage(3))
AddGadgetItem(17, 0, "Datei 3", UseImage(3))
AddGadgetItem(17, 0, "Datei 4", UseImage(3))
CloseTreeGadgetNode(17)
AddGadgetItem (17, 0, "Datei "+Str(k), UseImage(3))
Next
SpinGadget (18,500,#y+185,170,24,0,1000) ; 0 = Minimum, 1000 = Maximum
SetGadgetState (18,5) : SetGadgetText(18,"5") ; Anfangswert einstellen
GadgetToolTip (18,"Dies ist ein SpinGadget.")
StringGadget (19,500,#y+225,173,24,"StringGadget - bitte Text eingeben...")
TextGadget (20,500,#y+260,173,20,"Dies ist ein TextGadget...")
TextGadget (21,500,#y+280,173,35,"... und dies eins mit Rand und rechtsbündig",#PB_Text_Right|#PB_Text_Border)
TrackBarGadget (22,500,#y+325,157,24,0,100)
SetGadgetState (22,70)
ButtonGadget (88,662,#y+325, 20, 20, "?")
ProgressBarGadget(14,500,#y+355,157,18,0,50)
SetGadgetState (14,20)
ButtonGadget (89,662,#y+354, 20, 20, "?")
; Ermitteln des aktuellen Dateipfads
x = AllocateMemory(1,1000,0)
GetCurrentDirectory_(1000,x) ; WinAPI Befehl in Aktion
Dir$ = PeekS(x)
WebGadget (23,220,#y+385,462,100,"file://"+Dir$+"\Html\map.htm")
Repeat
EventID.l = WaitWindowEvent()
; Hier folgt jetzt die Überprüfung auf aufgetretene Ereignisse bei den Gadgets...
If EventID = #PB_EventGadget
Select EventGadgetID() ; Abfrage, bei welchem Gadget ein Ereignis auftrat (mit Hilfe der definierten Gadget-Nummer)
; Gadgets der linken Spalte im Demo-Fenster
Case 1 ; Schalter (Button)
MessageRequester("Beispiel für die Verwendung von DisableGadget()","Der Schalter wird gleich deaktiviert"+Chr(10)+"und der Bildschalter (wieder) aktiviert...",0)
DisableGadget(2,0) ; Aktiviert das Bild-Gadget
DisableGadget(1,1) ; Deaktiviert den "normalen" Schalter
Case 2 ; Bild-Schalter (ButtonImage)
MessageRequester("Beispiel für die Verwendung von DisableGadget()","Der Bildschalter wird gleich deaktiviert"+Chr(10)+"und der normale Schalter (wieder) aktiviert...",0)
DisableGadget(1,0) ; Aktiviert den "normalen" Schalter
DisableGadget(2,1) ; Deaktiviert den Bild-Schalter
Case 3 ; Häkchen-Schalter (CheckBox)
If GetGadgetState(3) = 1 ; mit Häkchen
a$="Das Häkchen wurde soeben gesetzt."
Else ; ohne Häkchen
a$="Das Häkchen wurde soeben entfernt."
EndIf
MessageRequester("Information zum Häkchen-Schalter",a$,0)
Case 98 ; Fragezeichen beim Auswahl-Gadget (ComboBox)
a=GetGadgetState(4)
If a = -1 ; nichts markiert
a$="Es wurde nichts ausgewählt !"
Else ; ein Eintrag wurde ausgewählt
a$="Sie haben folgenden Eintrag ausgewählt:"+Chr(10) ; Chr(10) fügt einen Zeilenumbruch hinzu
a$+"Index-Nr.: "+Str(a)+" - Name des Eintrags: "+GetGadgetText(4)
EndIf
MessageRequester("Information zur Auswahlbox",a$,0)
Case 5 ; Frame3DGadget
; hier erfolgt kein Abfrage, das ein Anklicken des Frame3DGadgets nicht möglich ist
; dieses Gadget dient nur zur Verzierung, ist also "lediglich" ein graphisches Element
Case 97 ; Fragezeichen beim IPAddressGadget
MessageRequester("Information über das IPAddressGadget","Die eingegebene IP-Adresse lautet: "+GetGadgetText(6),0)
Case 7 ; ImageGadget
; hier erfolgt kein Abfrage, das ein Anklicken des ImageGadgets nicht möglich ist
; dieses Gadget dient nur zur Verzierung, ist also "lediglich" ein graphisches Element
Case 96 ; Exit...
a = MessageRequester("Frage","Das Demo wirklich beenden ?",#PB_MessageRequester_YesNoCancel)
If a = 6 ; Ja angeklickt...
EventID = #PB_EventCloseWindow ; die Bedingung der übergeordneten Repeat-Until Schleife wird damit erfüllt und das Programm beendet
ElseIf a = 2 ; Abbrechen angeklickt
MessageRequester("Weiter gehts...","Sie haben Abbrechen angeklickt...",#PB_MessageRequester_Ok)
Else ; Nein angeklickt (a = 7)
MessageRequester("Weiter gehts...","Sie haben sich für nein entschieden :))",#PB_MessageRequester_Ok)
EndIf
; Gadgets der mittleren Spalte im Demo-Fenster
Case 8 ; ListIcon
SetGadgetText(95, "ListIcon Gadget"+Chr(10)+"-------------------------"+Chr(10)+"Lfd. Nummer des Eintrags: "+Str(GetGadgetState(8))+Chr(10)+"Inhalt: "+GetGadgetText(8))
If EventType() = 2 ; Doppelter Mausklick
MessageRequester("Information zum ListIconGadget", "Doppelter Mausklick: Eintrag "+Str(GetGadgetState(8))+", Text: "+GetGadgetText(8), 0)
ElseIf EventType() = 1 ; Rechter Mausklick
MessageRequester("Hilfe", "Dies ist ein ListIcon-Gadget!", 0)
EndIf
Case 9 ; ListView
SetGadgetText(95, "ListView Gadget"+Chr(10)+"-------------------------"+Chr(10)+"Lfd. Nummer des Eintrags: "+Str(GetGadgetState(9))+Chr(10)+"Inhalt: "+GetGadgetText(9))
If EventType() = 2 ; Doppelter Mausklick (entspricht #PB_EventType_LeftDoubleClick)
a$="Doppelter Mausklick: Eintrag "+Str(GetGadgetState(9)) ; ermittelt die Position des ausgewählten Eintrags, beginnend bei 0
a$+", Text: "+GetGadgetText(9) ; ermittelt den (Text-) Inhalt des ausgewählten Eintrags
a$+Chr(10) ; fügt einen Zeilenumbruch hinzu
a$+"Das Listview enthält "+Str(CountGadgetItems(9))+" Einträge" ; ermittelt die Anzahl der Einträge im Listview
MessageRequester("Information zum ListViewGadget",a$, 0) ; Ausgabe der eben im String a$ gespeicherten Informationen...
MessageRequester("ListViewGadget","Jetzt wollen wir den aktuell ausgewählten Eintrag im ListView entfernen...",0)
RemoveGadgetItem(9, GetGadgetState(9)) ; entfernt das aktuelle Element im ListView
a=MessageRequester("ListViewGadget","Na, sehen Sie ?",#PB_MessageRequester_YesNo)
If a=7 ; mit Nein geantwortet
a$="Tomaten auf den Augen... ? ;)"
Else ; mit Ja geantwortet
a$=":)))"
EndIf
MessageRequester("ListViewGadget",a$,0)
MessageRequester("ListViewGadget","Damit das Listview aber nicht leer wird,"+Chr(10)+"müssen wir natürlich auch wieder einen Eintrag hinzufügen.",0)
AddGadgetItem(9,0,a$) ; die 0 bestimmt die Position, an der neue Eintrag eingefügt wird - in diesem Fall an erster Stelle
; genauso wäre eine höhere Zahl möglich oder -1, wenn der neue Eintrag an letzter Stelle eingefügt werden soll
MessageRequester("ListViewGadget","Das war ein kleines Beispiel im Umgang mit dem ListViewGadget.",0)
EndIf
Case 94 ; Info-Schalter bei den OptionGadgets
a$="keiner"
If GetGadgetState(10) : a$ = GetGadgetText(10) : EndIf
If GetGadgetState(11) : a$ = GetGadgetText(11) : EndIf
If GetGadgetState(12) : a$ = GetGadgetText(12) : EndIf
MessageRequester("Information zum OptionGadget", "Ausgewählter Eintrag: "+a$, 0)
Case 93
MessageRequester("PanelGadget","Seite 1 des PanelGadget"+Chr(10)+"Schalter 1 angeklickt.",0)
Case 92
MessageRequester("PanelGadget","Seite 1 des PanelGadget"+Chr(10)+"Schalter 2 angeklickt.",0)
Case 91
MessageRequester("PanelGadget","Seite 2 des PanelGadget"+Chr(10)+"Schalter 3 angeklickt.",0)
Case 90
MessageRequester("PanelGadget","Seite 2 des PanelGadget"+Chr(10)+"Schalter 4 angeklickt.",0)
; Gadgets der rechten Spalte im Demo-Fenster
Case 17
SetGadgetText(95, "TreeGadget"+Chr(10)+"--------------------"+Chr(10)+"Lfd. Nummer des Eintrags: "+Str(GetGadgetState(17))+Chr(10)+"Inhalt: "+GetGadgetText(17))
If EventType() = 2 ; Doppelter Mausklick
MessageRequester("Information zum TreeGadget", "Doppelter Mausklick: Eintrag "+Str(GetGadgetState(17))+", Text: "+GetGadgetText(17), 0)
ElseIf EventType() = 1
DisplayPopupMenu(0, WindowID())
If EventMenuID() ; Wenn ein Menü-Eintrag ausgewählt wurde...
MessageRequester("Hilfe", "Dies ist ein Tree-Gadget!", 0)
EndIf
EndIf
Case 18 ; SpinGadget
SetGadgetText(18,Str(GetGadgetState(18)))
WindowEvent() ; unbedingt erforderlich, um endlose Ereignissschleifen zu vermeiden
Case 19 ; String-Gadget
If EventType() = #PB_EventType_ReturnKey
MessageRequester("Information", "Die Return-Taste wurde gedrückt.", 0)
EndIf
Case 88 ; Fragezeichen neben dem TrackBarGadget
a$="Der aktuelle Stand des Schiebereglers liegt bei "+Str(GetGadgetState(22))+"%."
MessageRequester("Information zum TrackBarGadget", a$, 0)
Case 89 ; Fragezeichen neben dem ProgressBarGadget
a$="Der aktuelle Stand des Fortschrittsbalkens liegt bei "+Str(GetGadgetState(14))+" von 50."
MessageRequester("Information zum ProgressBarGadget", a$, 0)
a$="Dies können wir jedoch auch einfach ändern:"+Chr(10)
a$+"Mit den Befehl SetGadgetState() und Random() setzen"+Chr(10)
a$+"wir den Wert auf einen zufällig ermittelten neuen Wert."
MessageRequester("Information zum ProgressBarGadget", a$, 0)
SetGadgetState(14,Random(50))
EndSelect
EndIf
; Überprüfen der Menü- UND Toolbar-Ereignisse
; ===========================================
; Dabei handelt es sich in diesem Beispiel um die gleichen Ereignisse (da die ToolBar-Piktogramme
; oftmals als "Shortcuts" für die entsprechenden Menü-Punkte dienen). Bei Verwendung der gleichen
; IDs für ToolBar- und Menüeinträge können mit EINER Abfrage die gleichen Operationen eingeleitet
; werden
If EventID = #PB_EventMenu
Select EventMenuID()
Case 1
Name$ = OpenFileRequester("Bitte Datei zum Laden auswählen", "C:\autoexec.bat", "Text (*.txt)|*.txt;*.bat|(PureBasic (*.pb)|*.pb|Alle Dateien (*.*)|*.*", 0)
If Name$+Name$
MessageRequester("Information", "Sie haben folgende Datei ausgewählt:"+Chr(10)+Name$, 0)
Else
MessageRequester("Information", "Der Requester wurde abgebrochen.", 0)
EndIf
Case 3
Name$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", "C:\autoexec.bat", "Text (*.txt)|*.txt;*.bat|(PureBasic (*.pb)|*.pb|Alle Dateien (*.*)|*.*", 0)
If Name$
MessageRequester("Information", "Sie haben folgende Datei ausgewählt:"+Chr(10)+Name$, 0)
Else
MessageRequester("Information", "Der Requester wurde abgebrochen.", 0)
EndIf
Case 11
MessageRequester("Info","Sie haben eines der beiden selbst erstellten Toolbar-Icons angeklickt.",0)
Case 12
MessageRequester("Info","Sie haben eines der beiden selbst erstellten Toolbar-Icons angeklickt.",0)
Case 13
If GetMenuItemState(0,13) = 1 ; Häkchen am Menüeintrag ist gesetzt
SetMenuItemState(0,13,0) ; Häkchen entfernen
DisableMenuItem(14,1) ; Untermenü 1 deaktivieren
DisableMenuItem(15,1) ; Untermenü 2 deaktivieren
Else ; Häkchen am Menüeintrag war nicht gesetzt
SetMenuItemState(0,13,1) ; Häkchen hinzufügen
DisableMenuItem(14,0) ; Untermenü 1 aktivieren
DisableMenuItem(15,0) ; Untermenü 2 aktivieren
EndIf
Case 16 ; Zeichensatz auswählen
If FontRequester("Courier", -13, 0)
a$="Sie haben folgenden Zeichensatz ausgewählt:"+Chr(10)
a$+"Name: "+SelectedFontName()+Chr(10)
a$+"Höhe: "+Str(SelectedFontSize())+Chr(10)
; a$+"Stil: "+Str(SelectedFontStyle())+Chr(10)
; a$+"Farbe: "+Str(SelectedFontColor())
MessageRequester("Information zum FontRequester", a$, 0)
EndIf
Case 17 ; Farbe auswählen
Farbe = ColorRequester()
If Farbe > -1
a$="Sie haben folgenden Farbwert ausgewählt:"+Chr(10)
a$+"Rot: "+Str(Red(Farbe))+Chr(10)
a$+"Grün: "+Str(Green(Farbe))+Chr(10)
a$+"Blau: "+Str(Blue(Farbe))
MessageRequester("Information zum ColorRequester", a$, 0)
EndIf
Case 18 ; Pfad festlegen
Pfad$ = PathRequester("Wählen Sie einen Dateipfad aus...","C:\")
If Pfad$
MessageRequester("Information zum PathRequester", "Folgender Dateipfad wurde ausgewählt:"+Chr(10)+Pfad$, 0)
Else
MessageRequester("Information zum PathRequester", "Der Requester wurde abgebrochen.", 0)
EndIf
Case 19 ; Über - Requester
a$="Diese Demo wurde für die BoxedVersion von PureBasic geschaffen und soll"+Chr(10)
a$+"Ihnen den Einstieg in die Programmierung von Windows-Oberflächen erleichtern."+Chr(10)+Chr(10)
a$+"(c) 2002 by Andre Beer / Topos Verlag"
MessageRequester("Über...",a$,0)
Case 500 ; F1-Taste
MessageRequester("Information","Sie haben die F1-Taste gedrückt.",0)
Case 501 ; ESC-Taste
MessageRequester("Information","Sie haben die ESC-Taste gedrückt.",0)
Default
MessageRequester("Information", "Ausgewählter ToolBar- bzw. Menü-Eintrag: "+Str(EventMenuID()), 0)
EndSelect
EndIf
Until EventID = #PB_EventCloseWindow
EndIf
EndIf
End