Seite 3 von 6

Verfasst: 08.07.2007 22:44
von al90
@Stargate

Der Code läuft jetzt auch unter PB4.02. Allerdings war durch den fehlenden FakeEndSelect in der 4.02 einige anpassungen nötig.

BTW:
Ich habe zur anpassung Gosub & Return rausgenommen und (notgedrungen)
durch ein Goto ersetzt. Normalerweise würde ich selbst sowas
nie machen, (Goto, Gosub & Return ist nicht so mein ding) habe
mich aber mal kurz deinen stil angepasst, da es auf anhieb die
schnellste Lösung war.

BTW2:
Die Originalzeilen die geändert wurden habe ich zur besseren übersicht
einkommentiert. :wink:

Code: Alles auswählen

; Converted by PBSourceConverter on 08.07.2007 / 22:17
Global Only, Space 

Procedure Aus(String$) 
 Restore Aus 
 Read Str$ 
 While Str$ 
  If FindString(String$, Str$, 1) 
   Gefunden = 1 
   If Str$ = " EndSelect " And Only 
    Only - 1 
   EndIf 
  EndIf 
  Read Str$ 
 Wend 
 ProcedureReturn Gefunden 
EndProcedure 

Procedure Ein(String$) 
 Restore Ein 
 Read Str$ 
 While Str$ 
  If FindString(String$, Str$, 1) 
   Gefunden = 1 
   If Str$ = " Select " And Only 
    Only + 1 
   EndIf 
  EndIf 
  Read Str$ 
 Wend 
 ProcedureReturn Gefunden 
EndProcedure 

Procedure Mitte(String$) 
 Restore Mitte 
 Read Str$ 
 While Str$ 
  If FindString(String$, Str$, 1) 
   Gefunden = 1 
  EndIf 
  Read Str$ 
 Wend 
 ProcedureReturn Gefunden 
EndProcedure 

Procedure Only(String$) 
 Restore Only 
 Read Str$ 
 While Str$ 
  If FindString(String$, Str$, 1) 
   Gefunden = 1 
  EndIf 
  Read Str$ 
 Wend 
 ProcedureReturn Gefunden 
EndProcedure 

Procedure DesktopX() 
 ProcedureReturn GetSystemMetrics_(0) 
EndProcedure 
Procedure DesktopY() 
 ProcedureReturn GetSystemMetrics_(1) 
EndProcedure 

OpenWindow(1, DesktopX()/2-200, DesktopY()/2-50, 400, 60, "Automatische Einrücküberarbeitung", #PB_Window_SystemMenu) 
 SetGadgetFont(#PB_Default,LoadFont(1,"Arial Fett",8)) 
 CreateGadgetList(WindowID(1)) 
  TextGadget(1, 5, 9, 50, 20, "Datei:", #PB_Text_Right) 
  StringGadget(2, 60, 5, 300, 20, "") 
  ButtonGadget(3, 365, 5, 30, 20, "...") 
  ProgressBarGadget(4, 5, 35, 290, 20, 0, 290, #PB_ProgressBar_Smooth) 
  ButtonGadget(5, 300, 35, 95, 20, "Start") 
  DisableGadget(5,1)  
  
loop:

Repeat 
 Event = WaitWindowEvent() 
 Select Event 
  Case #PB_Event_CloseWindow 
   End 
  Case #PB_Event_Gadget 
   Select EventGadget() 
    Case 2 
     FileName$ = GetGadgetText(2) 
     If FileName$ 
      DisableGadget(5,0) 
     Else 
      DisableGadget(5,1)      
     EndIf 
    Case 3 
     FileName$ = OpenFileRequester("", "*.*", "*.pb", 0) 
     SetGadgetText(2, FileName$)  
     If FileName$ 
      DisableGadget(5,0) 
     Else 
      DisableGadget(5,1)      
     EndIf 
    Case 5 
     DisableGadget(5,1) 
     DisableGadget(3,1) 
     DisableGadget(2,1) 
     If FileName$ 
       Break
;      FakeEndSelect  
;      Gosub Umschreiben 
     EndIf 
     DisableGadget(3,0) 
     DisableGadget(2,0) 
     SetGadgetState(4, 0) 
   EndSelect 
 EndSelect 
ForEver 



Umschreiben: 
 Space = 0 
 Only = 0 
 If ReadFile(1, FileName$) 
  If CreateFile(2, FileName$+".pb") 
   Repeat 
    If Random(10) : 
     Loc = Int(Loc(1)/Lof(1)*290) 
     SetGadgetState(4, Loc) 
     WindowEvent() 
    EndIf 
    StringEcht$ = Trim(ReadString(1)) 
    ;Kommentare 
    Pos = FindString(StringEcht$, ";", 1) 
    If Pos  
     String$ = Mid(StringEcht$,1, Pos-1) 
    Else 
     String$ = StringEcht$ 
    EndIf 
    ;String 
    x = 1 : k = 0 : 
    Repeat 
     x = FindString(String$, Chr(34), x) 
     If x 
      If k 
       String$ = Mid(String$, 1, xSave-1)+Mid(String$, x+1, Len(String$)) 
       x + 1 
      Else 
       xSave = x 
       x + 1 
      EndIf 
      k = 1-k 
     EndIf 
    Until x = 0 
    String$ = " "+String$+" " 
    ;Bearbeitung I 
    If Aus(String$) : 
     Space - 1 
     If Ein(String$) : 
      Space + 1 
     EndIf 
    Else 
     If Mitte(String$) : 
      Space - 1 
     EndIf 
    EndIf 
    If Only(String$) And Only : 
     Only - 1 
    EndIf 
    ;Einbauen 
    WriteStringN(2,Space(Space)+Space(Only)+StringEcht$) 
    ;Bearbeitung II 
    If Ein(String$) : 
     Space + 1 
     If Aus(String$) : 
      Space - 1 
     EndIf 
    Else 
     If Mitte(String$) : 
      Space + 1 
     EndIf 
    EndIf 
    If Only(String$) : 
     Only + 1 
    EndIf 
   Until Eof(1) 
   CloseFile(2) 
   F = MessageRequester("Info", "Datei wurde erfolgreich bearbeitet."+Chr(10)+"Datei jetzt öffnen ?", #PB_MessageRequester_YesNo) 
   If F = 6 
    RunProgram(FileName$+".pb", "",GetPathPart(FileName$+".pb"), 0) 
   EndIf 
  EndIf 
  CloseFile(1) 
 Else 
  MessageRequester("Fehler", "Datei konnte nicht geöffnet werden!", 0) 
 EndIf 

 DisableGadget(3,0) 
 DisableGadget(2,0) 
 SetGadgetState(4, 0) 
 Goto loop

;Return 



DataSection 
 Aus: 
  Data.s " EndIf ", " CompilerEndIf ", " Wend ", " Until ", " ForEver ", " Next ", " EndSelect ", " EndStructure ", " EndProcedure ", "" 
 Ein: 
  Data.s " If ", " CompilerIf ", " While ", " Repeat ", " For ", " Select ", " Structure ", " Procedure ", " Procedure.", "" 
 Mitte: 
  Data.s " Else ", " ElseIf ", "" 
 Only: 
  Data.s " Case ", " Default ", "" 
EndDataSection 

Verfasst: 08.07.2007 22:54
von michel51
ts-soft hat geschrieben:@michel51
Erstelle aus dem Source eine Exe.
Das geht schlecht, das der Mac so was nicht kann. Also entweder eine ".app" oder eine Unix executable (wobei die in dem Bundle auch drin ist).
Mal sehen, ich muss erst noch die Mac-spezifischen Befehle ergänzen und und ...

Verfasst: 08.07.2007 23:11
von STARGÅTE
[OT]

Wieso gibt's kein FakeEndSelect ??

draf man in 4.02 ohne FakeEndSelect "rausspringen" ?

Gibts da jetzt ein anderen Befehl ? (Break)

[/OT]

Verfasst: 08.07.2007 23:41
von al90
STARGÅTE hat geschrieben:[OT]

Wieso gibt's kein FakeEndSelect ??

draf man in 4.02 ohne FakeEndSelect "rausspringen" ?

Gibts da jetzt ein anderen Befehl ? (Break)

[/OT]
Ja, man kann mit Break schleifen wie Repeat/Until oder For/Next vorzeitig
beenden, ohne das weitere ausführungen innerhalb stattfinden. (Also z.b. hinter Until weitermachen)
Ich habe den FakeEndSelect() nie kennengelernt. Verstehe daher auch nicht
so ganz den sinn davon. Select/Endselect ist doch im grunde keine schleife :?:
Oder verlässt diese auch Repeat's ?

Verfasst: 09.07.2007 01:20
von STARGÅTE
Aus der Hilfe 3.3 hat geschrieben: Syntax
FakeEndSelect

Beschreibung

Wenn Sie aus einem Select-Abschnitt zu einem anderen Programmteil außerhalb des Select springen möchten (mit dem Befehl Goto), müssen Sie FakeEndSelect benutzen, welches ein EndSelect simuliert, ohne es wirklich auszuführen. Wenn Sie es nicht benutzen, wird Ihr Programm abstürzen.

Verfasst: 09.07.2007 15:02
von Kaeru Gaman
lol... achsoooo

nuja... wenn man kein Goto benutzt, weil das eh steinzeit ist, braucht man auch kein FakeEndSelect....

...ich weiß garnicht, wodurch das ersetzt wurde, oder ob man nun einfach rausspringen kann per goto....

Verfasst: 09.07.2007 17:29
von michel51
@StargÅte
Dein Code läuft mit den Änderungen von al90 auch auf dem Mac mit PB4 Beta1.
Es wird alles eingerückt, aber nur 1 Zeichen!
Ausserdem habe ich nach dem Start (Button) nur noch Buchstabensalat auf dem Desktop, der erst verschwindet, wenn ich die Anwendung schließe. Weiss noch nicht, wo das her kommt. Am Font kann es nicht liegen, die Zeile mit loadfont habe ich auch mal auskommentiert.

Habe auch noch ein klein wenig angepasst.
Die 2 Proceduren mit systemmetrics_ habe ich rausgeschmissen, den das gibt es nicht auf dem Mac. Habe statt dessen direkt angegeben z.B. x=40, y=50 und das Flag #PB_Window_Screencentered ergänzt. Geht wunderbar und läuft auf allen Plattformen.

Ausserdem habe ich Enumeration und StartDrawing nebst Abschluss ergänzt. Läuft auch.
Trotz der kleinen Ungereimtheiten macht das Tool, was es soll.
Danke.

@TS-Soft
Habe die Werkzeugeinstellung kapiert. Nachts um 3:50 Uhr ist der Groschen gefallen :D
Aber Ihr wisst ja, wie das ist. Zu den unmöglichsten Zeiten und an den unmöglichsten Orten (und Örtchen :mrgreen: ) fallen einem die Lösungen ein.

Verfasst: 09.07.2007 19:37
von al90
michel51 hat geschrieben:Es wird alles eingerückt, aber nur 1 Zeichen!
Ist bei mir nicht anders. Ich denke das es so gewollt war von @Stargate ?
Oder etwa doch nicht ? Ich hatte mir den code nur grob angesehen.
Ausserdem habe ich nach dem Start (Button) nur noch Buchstabensalat auf dem Desktop, der erst verschwindet, wenn ich die Anwendung schließe.
Ich schätze mal das es an den Flags von RunProgram() liegt ? (Nicht getestet)
Das von dir beschriebene phänomen tritt normalerweise immer dann auf,
wenn eine gestartete Anwendung mit dem Flag '#PB_Program_Wait'
versehen wird.

Verfasst: 09.07.2007 20:06
von D@nte
Es wird alles eingerückt, aber nur 1 Zeichen!
Mit dem Code bekommste dein Tablength das du in der IDE eingestellt hast, musste nur noch gucken wo und wie de das in den Source einbinden musst damit statt "1", "tablength" benutzt wird

Code: Alles auswählen

  ReadFile(0, #PB_Compiler_Home + "PureBasic.prefs")
  i = 0
  While Eof(0) = 0
    line = ReadString(0)
    If FindString(line, "TabLength", 0) <> 0
      tablength = Val(StringField(line, 3, " = "))
      Break
    EndIf
    i + 1
  Wend
  CloseFile(0)

Verfasst: 09.07.2007 20:32
von ts-soft
@D@nte
So ist wohl schneller und einfacher :wink:

Code: Alles auswählen

If OpenPreferences(#PB_Compiler_Home + "PureBasic.prefs")
  PreferenceGroup("Global")
  tablength = ReadPreferenceLong("TabLength", 2)
  ClosePreferences()
EndIf
Funktioniert aber nur bis PB4.02! Wegen des Pfades