Window mit Image und Buttons erstellt - Funktionen lernen?

Anfängerfragen zum Programmieren mit PureBasic.
01-andreas
Beiträge: 34
Registriert: 06.12.2010 15:02
Computerausstattung: Betriebssystem: Windows 7 x64
2,6 x 4 GHz
4 GB RAM
Ati Radeon HD 5830
Wohnort: Kiel

Window mit Image und Buttons erstellt - Funktionen lernen?

Beitrag von 01-andreas »

Hallo,

ich habe mich heute intensiv mit dem Thema Window-Handling beschäftigt (Tutorial als PDF). Hier habe ich gelernt, wie man allgemein Window Fenster erstellen kann, Buttons und ein Bild erstellen kann.

Jetzt wollte ich gerne wissen, wie und wo ich lernen kann, dass man wenn man auf ein Button klickt, dass das Programm automatisch für mich eine Notepad Datei auf meiner Festplatte bearbeitet (Notepad Datei öffnen, bearbeiten, speichern und beenden)

Gibt es dort ein Tutorial mit den ganzen Funktionen? Ich habe bisher keins gefunden, im Purebasic Buch habe ich auch nichts gefunden, das nächstes Thema nach Windows-Handling war 2D Zeichen.

Könnt ihr mir hier sagen, welche Stichwörter es sind oder in welchem Tutorial ich es nachlesen kann?
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Window mit Image und Buttons erstellt - Funktionen lerne

Beitrag von c4s »

Ich halte nicht viel davon einfach nur einem Tutorial zu folgen, denn da fehlt meiner Meinung nach der Lerneffekt. Probiere doch einfach mal selbst mit den folgenden Stichwörtern herum und versuche dabei nur die PureBasic-Hilfe zu benutzen:
WaitWindowEvent(), OpenFile(), ReadString(), WriteString()

Wenn du fertig bist, kannst du am Ende (!) dein Werk mit einem Musterbeispiel vergleichen und siehst dann was man hätte besser machen können etc. - "Learning by doing" ist immer noch die beste Lernmethode. :allright:
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
01-andreas
Beiträge: 34
Registriert: 06.12.2010 15:02
Computerausstattung: Betriebssystem: Windows 7 x64
2,6 x 4 GHz
4 GB RAM
Ati Radeon HD 5830
Wohnort: Kiel

Re: Window mit Image und Buttons erstellt - Funktionen lerne

Beitrag von 01-andreas »

OpenFile(), ReadString(), WriteString(), die drei Dinge musste ich genau wissen, kenne die noch nicht.

Jetzt kann ich dank dir schauen in der F1 Liste. Ich probiere es jetzt mal , sollte irgendetwas nicht funktionieren, poste ich es hier nochmal. Trotzdem nochmal Danke, ich brauchte dringend diese Stichwörter.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Window mit Image und Buttons erstellt - Funktionen lerne

Beitrag von Kiffi »

zum Auslesen einer Datei bitte ReadFile() verwenden. Um
eine Datei zu erstellen benutzt man CreateFile().

OpenFile() benötigt man in eher seltenen Fällen und ist nicht
grade anfängertauglich.

Grüße ... Kiffi
a²+b²=mc²
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Window mit Image und Buttons erstellt - Funktionen lerne

Beitrag von c4s »

@Kiffi
Andreas sprach vom Bearbeiten einer Datei. OpenFile() ist dabei wohl am passendsten (wobei du recht damit hast, dass es unverständlicher sein könnte).
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
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: Window mit Image und Buttons erstellt - Funktionen lerne

Beitrag von ts-soft »

Hier ein dokumentiertes Beispiel für ein Editor.

Ist für den Anfang zwar recht viel, aber wenn Du Dich auf einzelne Proceduren konzentrierst,
sollte das auch helfen.

Gruß
Thomas

// edit
Vielleicht erstmal was einfaches. Simple Ampel, die auf Knopfdruck reagiert :wink:

Code: Alles auswählen

EnableExplicit

Enumeration ; Bilder
  #AmpelRot
  #AmpelGelb
  #AmpelGruen
EndEnumeration

Enumeration ; Fenster
  #frmMain
EndEnumeration

Enumeration ; Gadgets
  #Image_Ampel
  #Button_Rot
  #Button_Gelb
  #Button_Gruen
EndEnumeration

; hier werden einmalig die 3 Ampelbilder erzeugt
Procedure Create_AmpelImage(image)
  If CreateImage(image, 100, 240)
    If StartDrawing(ImageOutput(image))
      Box(0, 0, 100, 240, $FFFFFF)
      RoundBox(4, 4, 92, 232, 20, 20, $182D17)
      Circle(50, 50, 30, $003900)
      Circle(50, 120, 30, $003900)
      Circle(50, 190, 30, $003900)
      Select image
        Case #AmpelRot
          Circle(50, 50, 30, $0000FF)
        Case #AmpelGelb
          Circle(50, 120, 30, $00FFFF)
        Case #AmpelGruen
          Circle(50, 190, 30, $00FF00)
      EndSelect
      StopDrawing()
    EndIf
  EndIf
EndProcedure

; hier wird das Hauptfenster erzeugt
Procedure Create_frmMain()
  If OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 220, 260, "Ampel", #PB_Window_SystemMenu | #PB_Window_Invisible)
    
    ImageGadget(#Image_Ampel, 10, 10, 100, 240, ImageID(#AmpelGruen), #PB_Image_Border)
    ButtonGadget(#Button_Rot, 120, 50, 80, 20, "Rot")
    ButtonGadget(#Button_Gelb, 120, 120, 80, 20, "Gelb")
    ButtonGadget(#Button_Gruen, 120, 190, 80, 20, "Gruen")
    ProcedureReturn #True
  EndIf
EndProcedure

Define image
; alle 3 Ampelbilder in der Schleife Mithilfe der Procedure erzeugen
For image = #AmpelRot To #AmpelGruen
  Create_AmpelImage(image)
Next

If Create_frmMain() ; wenn Fenster erzeugt
  HideWindow(#frmMain, #False); dann anzeigen
  
  Repeat ; hier beginnt der Event-Loop
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow ; Fenster schliessen oder Alt+F4 wurden gedrückt
        Break ; schleife verlassen (in diesem Beispiel wird das Programm dadurch auch beendet)
        
      Case #PB_Event_Gadget ; ein Gadget wurde gedrückt
        Select EventGadget() ; feststellen, welche Gadget
          Case #Button_Rot
            SetGadgetState(#Image_Ampel, ImageID(#AmpelRot)) ; Ampel umschalten (Bild austauschen)
          Case #Button_Gelb
            SetGadgetState(#Image_Ampel, ImageID(#AmpelGelb)) ; Ampel umschalten
          Case #Button_Gruen
            SetGadgetState(#Image_Ampel, ImageID(#AmpelGruen)) ; Ampel umschalten
        EndSelect
    EndSelect
  ForEver
EndIf
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.
Bild
01-andreas
Beiträge: 34
Registriert: 06.12.2010 15:02
Computerausstattung: Betriebssystem: Windows 7 x64
2,6 x 4 GHz
4 GB RAM
Ati Radeon HD 5830
Wohnort: Kiel

Re: Window mit Image und Buttons erstellt - Funktionen lerne

Beitrag von 01-andreas »

Wow echt ein tolles Beispiel, ich habe mir es eben mal schnell angeguckt, die Codes soweit verstehe ich alles recht gut. In den nächsten Tagen, wenn ich Zeit habe, werde ich mich damit intensiver beschäftigen.

Was ich hier gerade sehe ist, dass man für dieses Beispiel diese Stichwörter kennen muss:

Proceduren,Konstanten,If,EndIf, OpenWindow,Next,Select und natürlich 2D noch.

Was für mich in diesem Beispiel noch ziemlich neu ist: Break und Define image, in den nächsten Tagen werde ich mir diese Funktionen anschauen in der Purebasic F1 Hilfe, aber so schwer scheint es gar nicht zu sein, man muss nur diese Stichwörter alle gut verstehen können.
Benutzeravatar
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: Window mit Image und Buttons erstellt - Funktionen lerne

Beitrag von ts-soft »

Wenn Du den Code halbwegs verstanden hast, solltest Du damit spielen :wink:
Die 3 Buttons ersetzen durch 3 OptionGadgets.
Danach vielleicht durch ComboBoxGadget ersetzen.

Später vielleicht noch die Rot/Gelb Phase einbauen, als 4tes Image.

Du solltest also mit diesem kleinem Beispiel erstmal ein paar Tage/Wochen rumspielen,
dabei lernst Du am meisten.

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.
Bild
Benutzeravatar
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: Window mit Image und Buttons erstellt - Funktionen lerne

Beitrag von ts-soft »

Hatte gerade langeweile :wink:

Dieser Ampelcode enthält folgende Änderungen:
4 Ampelbilder (Rot/Gelb Phase eingebaut)
Bilder werden rekursiv in der Procedure erstellt (ohne For:Next Schleife)
Knöpje entfernt und durch Timer ersetzt.

Automatische Ampel ist ja auch realistischer :mrgreen:

Code: Alles auswählen

EnableExplicit

Enumeration ; Bilder
  #AmpelRot
  #AmpelRotGelb
  #AmpelGelb
  #AmpelGruen
EndEnumeration

Enumeration ; Fenster
  #frmMain
EndEnumeration

Enumeration ; Gadgets
  #Image_Ampel
EndEnumeration

; hier werden einmalig die 4 Ampelbilder erzeugt
Procedure Create_AmpelImage(image = #AmpelRot)
  If CreateImage(image, 100, 240)
    If StartDrawing(ImageOutput(image))
      Box(0, 0, 100, 240, $FFFFFF)
      RoundBox(4, 4, 92, 232, 20, 20, $182D17)
      Circle(50, 50, 30, $003900)
      Circle(50, 120, 30, $003900)
      Circle(50, 190, 30, $003900)
      Select image
        Case #AmpelRot
          Circle(50, 50, 30, $0000FF)
        Case #AmpelRotGelb
          Circle(50, 50, 30, $0000FF)
          Circle(50, 120, 30, $00FFFF)
        Case #AmpelGelb
          Circle(50, 120, 30, $00FFFF)
        Case #AmpelGruen
          Circle(50, 190, 30, $00FF00)
      EndSelect
      StopDrawing()
    EndIf
  EndIf
  image + 1
  If image <= #AmpelGruen
    Create_AmpelImage(image) ; rekursiver Aufruf der Procedure
  EndIf
EndProcedure

; hier wird das Hauptfenster erzeugt
Procedure Create_frmMain()
  If OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 120, 260, "Automatische-Ampel", #PB_Window_SystemMenu | #PB_Window_Invisible)
    
    ImageGadget(#Image_Ampel, 10, 10, 100, 240, ImageID(#AmpelRot), #PB_Image_Border)

    ProcedureReturn #True
  EndIf
EndProcedure

Define state = #AmpelRot
; alle 4 Ampelbilder in der Procedure erzeugen
Create_AmpelImage()

If Create_frmMain() ; wenn Fenster erzeugt
  HideWindow(#frmMain, #False); dann anzeigen
  
  AddWindowTimer(#frmMain, 1, 10000)
  
  Repeat ; hier beginnt der Event-Loop
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow ; Fenster schliessen oder Alt+F4 wurden gedrückt
        Break ; schleife verlassen (in diesem Beispiel wird das Programm dadurch auch beendet)
      
      Case #PB_Event_Timer ; Timer-Ereignis wurde ausgelöst
        Select EventTimer() ; welcher Timer (wir haben nur Timer 1 in diesem Beispiel!)
          Case 1
            Select state
              Case #AmpelRot
                state = #AmpelRotGelb
                ; wir passen das Timeout an!
                AddWindowTimer(#frmMain, 1, 2000) ; RotGelb phase nur 2 sek.
                
              Case #AmpelRotGelb
                state = #AmpelGruen
                AddWindowTimer(#frmMain, 1, 20000) ; lange Grünphase ;)
              
              Case #AmpelGruen
                state = #AmpelGelb
                AddWindowTimer(#frmMain, 1, 3000) ; Gelb phase 3 sek.
                
              Case #AmpelGelb
                state = #AmpelRot
                AddWindowTimer(#frmMain, 1, 10000)
            EndSelect
            
            SetGadgetState(#Image_Ampel, ImageID(state)) ; Ampelbild gemäß aktuellem state setzen
        EndSelect
    EndSelect
  ForEver
EndIf
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.
Bild
Antworten