Seite 3 von 4

Verfasst: 04.09.2006 20:42
von mk-soft
ich weiss.

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

FF :wink:

Verfasst: 04.09.2006 21:09
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

Verfasst: 04.09.2006 21:15
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

Verfasst: 05.09.2006 21:24
von mk-soft
Das Basteln war erfolgreich.

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

FF :wink:

Verfasst: 05.09.2006 21:31
von Falko
:allright: Gute Idee mit dem Editor-Tut :allright:

Grüße ... Falko

Verfasst: 07.09.2006 22:09
von Sir0Kuhl
könnte es sein, dass bei 3.30 enumeration nicht gibt? :|

Verfasst: 07.09.2006 22:39
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
...

Verfasst: 08.09.2006 02:31
von Sir0Kuhl
edit: frage hat sich erledigt

Verfasst: 08.09.2006 22:55
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

Verfasst: 09.09.2006 01:19
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