gutes beginner-tutorial?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

ich weiss.

Ich habe gerade kein aktuelles Projekt und bastel mal was zusammen.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Im CodeArchiv bzw. C.A.V ist z.B. ein Editor
MultilineEditor.pb als gute Grundlage dazu.
Menüs etc. könnte man da noch hinzufügen.
Einiges müsste noch an PB 4 angepasst werden, was ich mal eben
schnell hier gemacht habe.

Code: Alles auswählen

If OpenWindow(0,200,200,300,150,"test",#PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
  t$="This text goes inside a multiline StringGadget."+Chr(13)+Chr(10)
  For r=2 To 10 : t$+Str(r)+Chr(13)+Chr(10) : Next
  StringGadget(0,10,10,200,100,t$,#ES_MULTILINE |#ES_AUTOVSCROLL|#WS_VSCROLL|#WS_HSCROLL)
  ButtonGadget(1,230,10,50,20,"Save")
  ButtonGadget(2,230,40,50,20,"Load")
  ButtonGadget(3,230,70,50,20,"Info")
  Repeat
    ev=WaitWindowEvent()
    If ev=#PB_Event_Gadget
      Select EventGadget()
        Case 1 ; Save
          If CreateFile(0,"MultiLine.txt")
            WriteStringN(0,GetGadgetText(0))
            CloseFile(0)
          EndIf
        Case 2 ; Load
          If ReadFile(0,"MultiLine.txt")
            a$=""
            Repeat
              a$+ReadString(0)+Chr(13)+Chr(10)
            Until Eof(0)<>0
            CloseFile(0)
            SetGadgetText(0,a$)
          EndIf
        Case 3 ; Info
          lines=SendMessage_(GadgetID(0),#EM_GETLINECOUNT,0,0)
          where=SendMessage_(GadgetID(0),#EM_LINEFROMCHAR,-1,0)+1
          MessageRequester("Info",Str(lines)+" lines in the box."+Chr(13)+"You are on line "+Str(where)+".",0)
      EndSelect
    EndIf
  Until ev=#PB_Event_CloseWindow
EndIf
[Edit] Leider auch mit API-Unterstützung, also speziell für Windowsfreunde und Linuxgegner ala B.Gates:lol:[/Edit]

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
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

Beitrag von ts-soft »

Der verwendet auch API :wink:

Also würde ich in dem Editor auch API verwenden, aber dann gleich richtig.
Bei der Gelegenheit gleich SendMessage_() und das WindowsCallback() (die
Parameter gleichen sich ja nicht zum Spaß) erklären, damit der
fortgeschrittene Newbee die Zusammenhänge lernt.

Bei verzicht auf API, sollte es auch kein Editor sein :wink:

@mk-soft
Hab hier mal was rausgesucht, kannste ausschlachten :mrgreen:
http://ts-soft.eu/dl/clonepad.zip
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
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Das Basteln war erfolgreich.

Tutorial - Editor http://www.purebasic.fr/german/viewtopic.php?t=9833

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

:allright: Gute Idee mit dem Editor-Tut :allright:

Grüße ... Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Sir0Kuhl
Beiträge: 47
Registriert: 04.09.2006 01:12

Beitrag von Sir0Kuhl »

könnte es sein, dass bei 3.30 enumeration nicht gibt? :|
AMD Sempron 2800+ 1,6 ghz | 768 MB RAM | Radeon X1600PRO | PureBasic 4.0 | Blitz3D
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

Beitrag von ts-soft »

Sir0Kuhl hat geschrieben:könnte es sein, dass bei 3.30 enumeration nicht gibt? :|
PureBasic Geschichte hat geschrieben:6. Oktober 2003 : Version 3.80

...
- Hinzugefügt: Enumeration/EndEnumeration zum schnellen Deklarieren einer Vielzahl aufeinanderfolgender Konstanten
...
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
Sir0Kuhl
Beiträge: 47
Registriert: 04.09.2006 01:12

Beitrag von Sir0Kuhl »

edit: frage hat sich erledigt
AMD Sempron 2800+ 1,6 ghz | 768 MB RAM | Radeon X1600PRO | PureBasic 4.0 | Blitz3D
Benutzeravatar
Sir0Kuhl
Beiträge: 47
Registriert: 04.09.2006 01:12

Beitrag von Sir0Kuhl »

so hab mal ein erstes programm geschrieben, ein kleines telefonbuch (PB 3.30):

Code: Alles auswählen

;Funktionen#####################################################
Procedure JNAbfrage(head.s,text.s,breite.l)
If OpenWindow(2,450,300,breite.l,80,#PB_Window_SystemMenu,head.s)

 ;Gadgets
 If CreateGadgetList(WindowID())
  TextGadget(11,5,5,290,20,text.s)
  ButtonGadget(12,10,50,100,25,"Ja")
  ButtonGadget(13,breite.l-110,50,100,25,"Nein")
 EndIf
 
 Repeat
  
  ActivateWindow()
  event.l = WaitWindowEvent()
  
  Select event
   
   Case #PB_Event_CloseWindow
    wahl.b = 0
    fertig.b = 1
    CloseWindow(2)
    
   Case #PB_Event_Gadget
    Select EventGadgetID()
     Case 12 ;Ja-Button
      wahl.b = 1
      fertig.b = 1
      CloseWindow(2)
     Case 13 ;Nein-Button
      wahl.b = 0
      fertig.b = 1
      CloseWindow(2)
    EndSelect
  EndSelect
  
 Until fertig.b = 1
EndIf
ProcedureReturn wahl.b
 
EndProcedure



;Hauptprogramm#####################################################

If OpenWindow(1,400,50,350,500,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget,"Telefonbuch")
 
 ;Gadgets
 If CreateGadgetList(WindowID())
  TextGadget(1,5,5,100,20,"Vorname:")
  TextGadget(2,5,30,100,20,"Name:")
  TextGadget(3,5,55,100,20,"Tel.:")
  StringGadget(4,110,5,230,20,"")
  StringGadget(5,110,30,230,20,"")
  StringGadget(6,110,55,230,20,"",#PB_String_Numeric)
  ListViewGadget(7,10,115,330,350)
  ButtonGadget(8,10,470,100,25,"Eintragen")
  ButtonGadget(9,125,470,100,25,"Löschen")
  ButtonGadget(10,240,470,100,25,"Beenden")
 EndIf
 


 ;Telefonbuch-Daten aus Datei einlesen
 If OpenFile(1,"data.tel")
  Repeat
   zeile.s = ReadString()
   If zeile.s <> ""
    AddGadgetItem(7,-1,zeile.s)
   EndIf
  Until zeile.s = ""
  CloseFile(1)
 EndIf
 


 ;Hauptschleife####################
 Repeat
  
  event.l = WaitWindowEvent()
  
  Select event
   Case #PB_Event_CloseWindow
    Exit.b = 1
    Save.b = JNAbfrage("Speichern","Möchten Sie das Telefonbuch abspeichern?",235)
    
   Case #PB_Event_Gadget
    Select EventGadgetID()
     Case 8 ;Eintragen-Button
      If GetGadgetText(4) <> "" And GetGadgetText(5) <> "" And GetGadgetText(6) <> ""
       AddGadgetItem(7,-1,GetGadgetText(4)+"  "+GetGadgetText(5)+"   ---   Tel.: "+GetGadgetText(6))
       SetGadgetText(4,"")
       SetGadgetText(5,"")
       SetGadgetText(6,"")
      Else
       MessageRequester("Fehler","Bitte alle Felder ausfüllen!",0)
      EndIf
     Case 9 ;Löschen-Button
      gadgetstate.w = GetGadgetState(7)
      If gadgetstate.w <> -1
       If JNAbfrage("Eintrag löschen","Möchten Sie diesen Eintrag wirklich löschen?",235)
        RemoveGadgetItem(7,gadgetstate.w)
       EndIf
      EndIf
     Case 10 ;Beenden-Button
      Exit.b = 1
      Save.b = JNAbfrage("Speichern","Möchten Sie das Telefonbuch abspeichern?",235)
    EndSelect
  EndSelect
  
 Until Exit.b = 1
 
 If Save.b = 1
  If CreateFile(1,"data.tel")
   Repeat
    eintrag.s = GetGadgetItemText(7,eintragnr.l,0)
    If eintrag.s <> ""
     WriteStringN(eintrag.s)
    EndIf
    eintragnr.l = eintragnr.l + 1
   Until eintrag.s =""
   CloseFile(1)
  EndIf
 EndIf
 
EndIf
End
is jetz nicht großartig kommentiert (is ja auch kein langer code)
wollt ma wissen wie ihr meinen programmierstil findet
AMD Sempron 2800+ 1,6 ghz | 768 MB RAM | Radeon X1600PRO | PureBasic 4.0 | Blitz3D
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Für den anfang nicht schlecht.
Die Abfrage kannst du auch den MessageRequester(Titel$, Text$, Flags) nehmen. Siehe Hilfe.

Für die Variablen wahl und fertig nehme lieber Long. Bei den 32bit System bring Byte keinen vorteil. Ist sogar in der verarbeitung langsamer als Long.
Selbst Boolean wird bei Windows intern als Long ablegt.

FF :wink:

P.S. Habe wieder zum testen PB3.3 Installiert. :roll:

Das Upgrade auf die Vollversion lohnt sich auf alle fälle. Ich hatte auch erst die Topos-Version und bin schnell umgestiegen. Ein Kaufnachweiss reicht für das Upgrade.

http://www.purearea.net/pb/german/index.htm
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten