Seite 2 von 2

Re: Umsteiger sucht Einstieg

Verfasst: 27.02.2010 12:58
von mk-soft
Willkommen auch von mir :wink:

Ist mir nie aufgefallen das kein Drucken gibt. Finde es auch nicht sinnvoll ein Programm zu Drucken da es sehr schnell zu mehrenen hunderten Zeilen kommt.

Habe früher auch mict Pascal programmiert. Hatte oder habe auch noch ein Compiler für CPM80 betriebssysteme :mrgreen:

Für den Anfang für Umsteiger mal die Hilfe von PB mal in folgende Bereiche mal durch zu lesen.

Allgemeine Themen
- Allgemeine Syntax Regeln
- Variablen, Typen und Operatoren

Und dann nach unten einfach weiter. Somit hatt man schon ein Guten Einstieg.

Viele Einsteiger haben meisten ein Problem mit den Eventhändling der GUI und rufen diese meist falsch oder Doppel ab.

Zum testen verwende ich immer ein fertigen Programmbaustein. Der beinhaltet schon mal alle erforderlichen abfragen der GUI Events.

Code: Alles auswählen

;- Konstanten
Enumeration ; Window ID
  #Window
EndEnumeration

Enumeration ; Menu ID
  #Menu
EndEnumeration

Enumeration ; MenuItem ID
  #Menu_Exit
EndEnumeration

Enumeration ; Statusbar ID
  #Statusbar
EndEnumeration

Enumeration ; Gadget ID
  #List
EndEnumeration

; ***************************************************************************************

; Es müssen immer alle Variablen declariert werden

EnableExplicit

; ***************************************************************************************

Procedure UpdateWindow()

  Protected x,y,dx,dy
  Protected mn,st,tb
  
  x = 0
  y = 0
  mn = MenuHeight()
  st = StatusBarHeight(#StatusBar)
  ;tb = ToolBarHeight(#ToolBar)
  dx = WindowWidth(#Window)
  dy = WindowHeight(#Window) - mn - st - tb
  ResizeGadget(#List, x, y, dx, dy)
  
EndProcedure

Procedure WriteLog(Info.s)
  Protected temp.s
  temp = FormatDate("%YYYY.%MM.%DD %HH:%II:%SS - ", Date()) + Info
  AddGadgetItem(#List, -1, temp)
  If CountGadgetItems(#List) > 500
    RemoveGadgetItem(#List, 0)
  EndIf
EndProcedure

;- Globale Variablen
Global exit = 0

; Main in eine Procedure gekapselt

Procedure Main()

  Protected style, event, window, menu, gadget, type
 
  ;- Fenster
  style = #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget
  If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 400, 300, "Fenster", style)
    ; Menu
    If CreateMenu(#Menu, WindowID(#Window))
      MenuTitle("&Datei")
        MenuItem(#Menu_Exit, "Be&enden")
    EndIf
    ; Statusbar
    CreateStatusBar(#Statusbar, WindowID(#Window))
    ; Gadgets
    ListViewGadget(#List, 0,0,0,0)
    
    ; Init
    WriteLog("Programm gestartet")
    
    ;-- Hauptschleife
    Repeat
      event = WaitWindowEvent()
      Select event
        Case #PB_Event_Menu                       ; ein Menü wurde ausgewählt
          menu = EventMenu()
          Select menu
            Case #Menu_Exit
              Exit = 1
          EndSelect
        Case #PB_Event_Gadget                     ; ein Gadget wurde gedrückt
          gadget = EventGadget()
          type = EventType()
        
        Case #PB_Event_CloseWindow                ; das Schließgadget vom Fenster wurde gedrückt
          window = EventWindow()
          If window = #Window
            Exit = 1
          EndIf
         
        Case #PB_Event_Repaint                    ; der Fensterinhalt wurde zerstört und muss neu gezeichnet werden (nützlich für 2D Grafik-Operationen)
        Case #PB_Event_SizeWindow                 ; das Fenster wurde in der Größe verändert
          window = EventWindow()
          If window = #Window
            UpdateWindow()
          EndIf

        Case #PB_Event_MoveWindow                 ; das Fenster wurde verschoben
        Case #PB_Event_ActivateWindow             ; das Fenster wurde aktiviert (hat den Fokus erhalten)
        Case #PB_Event_SysTray                    ; das SysTray wurde aktiviert
     
      EndSelect
     
    Until Exit
  EndIf
EndProcedure : Main() 

Einfach mal mit F1 die einzelnen funktionen nachlesen...

Viel freude noch mit den proggen mit PB :allright:

Re: Umsteiger sucht Einstieg

Verfasst: 27.02.2010 14:11
von Pelagio
Ich habe mich noch einmal mit den Drucken des Sourcecodes beschäftigt und habe mir auf die schnelle ein kleines Tool zusammengeschustert welches ich kompiliert und als Werkzeug aufgenommen habe. Für meine Zwecke reicht es und so möchte ich es auch der Allgemeinheit nicht vorenthalten.

Code: Alles auswählen

; IDE - Source drucken
;~~~~~~~~~~~~~~~~~~~~~~

EnableExplicit

Procedure FileLoad(vFile.s, List vValue.s())
   If ReadFile(0, vFile)
      While Not Eof(0)
         AddElement(vValue())
         vValue() =  ReadString(0)
      Wend
      CloseFile(0)    
   EndIf
EndProcedure

Procedure PrintKopf(vFile.s)
   DrawingFont(FontID(0))
   DrawText(100, 100, vFile, #Black)
   DrawingFont(FontID(1))
EndProcedure

Procedure FilePrint(vFile.s, List vValue.s())
   Protected pValue.s, pX.i, pY.i = 400
   
   If PrintRequester()
      If StartPrinting("PureBasic Sourcedruck")
         LoadFont(0, "Arial", 75)
         LoadFont(1, "Arial", 50)
         If StartDrawing(PrinterOutput())
            DrawingMode(#PB_2DDrawing_Transparent)
            PrintKopf(vFile)
            ForEach vValue()
               pX = 100
               pValue =  RSet(Str(ListIndex(vValue())),4, "0") + ":  " + vValue()
               Repeat
                  DrawText(pX, pY, Left(pValue, 140), #Black)
                  If (pY=6600)
                     NewPrinterPage()
                     PrintKopf(vFile)   
                     pY = 400
                  Else
                     pY + 100
                  EndIf
                  pValue = Mid(pValue, 140)
                  pX = 300
               Until Not Len(pValue)
            Next
            StopDrawing()
         EndIf
         StopPrinting()
      EndIf
   EndIf
EndProcedure

Procedure Main(vFile.s)
   Protected NewList pValue.s()
   
   If vFile
      FileLoad (vFile, pValue())
      FilePrint(vFile, pValue())
   EndIf 
EndProcedure

Main (ProgramParameter())

End
:allright:

Re: Umsteiger sucht Einstieg

Verfasst: 27.02.2010 14:36
von dysti
wie hast du das eingebunden?
Bei mir kommt nur :
C:\Dokumente

Re: Umsteiger sucht Einstieg

Verfasst: 27.02.2010 14:48
von ts-soft
dysti hat geschrieben:wie hast du das eingebunden?
Bei mir kommt nur :
C:\Dokumente
Wie wäre es mit Anführungszeichen :mrgreen:
"%FILE" oder "%TEMPFILE"

Re: Umsteiger sucht Einstieg

Verfasst: 27.02.2010 14:58
von dysti
Mensch ts-soft, daaaaannnnnnnnnkkkkkkkeeeeee

Re: Umsteiger sucht Einstieg

Verfasst: 27.02.2010 15:01
von ts-soft
dysti hat geschrieben:Mensch ts-soft, daaaaannnnnnnnnkkkkkkkeeeeee
Die erforderlichen Anführungszeichen wurde mit den langen Dateinamen 1995 mit Win95
eingeführt. Nach 15 Jahren sollte man eigentlich erwarten können ... :lol:

Re: Umsteiger sucht Einstieg

Verfasst: 27.02.2010 15:06
von dysti
Bin grad aus dem Krankenhaus, die Nakose steckt wohl noch in den Gliedern und beeinträchtigt das Denk- und Sehvermögen. :lol:
Man sieht ja vor lauter Bäume nun mal nicht den Wald, so ist das.

Re: Umsteiger sucht Einstieg

Verfasst: 27.02.2010 15:45
von mk-soft
Zeilennummer stimmt nicht.
Da fehlt ein +1.
"pValue = RSet(Str(ListIndex(vValue())+1),4, "0") + ": " + vValue()"

FF :wink: