Seite 1 von 4

[halb GELÖST] Richtige Darstellung von Ascii NFOs u. ä ö ü?

Verfasst: 01.06.2015 17:33
von udg
Ich bin auf ein nettes Tool gestoßen Namens: "Pure NFO Viewer", siehe Link.
http://rghost.net/6tWwmTRHN

Freundlicher Weise enthält das Tool den PB Code. Nun habe ich mir überlegt das Ganze für meine Bedürfnisse anzupassen. Leider kommen in PB 5.3 Fehler, wenn ich das Script kompilieren möchte. Weis nicht so recht wo ich ansetzen muss um vorerst die *.PB zum laufen zu bekommen.
Es geht darum, dass die ASCII Art Bilder, wenn ich sie lade, bzw mit Kopieren und aus der Zwischenablage in mein EditorGadget einfügen, richtig dargestellt werden.
Im Moment werden sie in normale Zeichen umgewandelt. Dies möchte ich gern aus dem beigefügten Code entnehmen um die korrekte Formatiereung beizubehalten.
Wie muss ein EditorGadget formatiert werden, damit die korrekte Darstellung erhalten bleibt?

Viele Grüße
edit
den hier nachfolgenden Code habe ich nicht verwendet, hat mir nichts gebracht

Code: Alles auswählen

#CR_LF = Chr(13) + Chr(10)

Enumeration
  #MainWindow
  #OpenButtonImage
  #CopyButtonImage
  #AboutButtonImage
  #MainFrame3D
  #MainRichEdit
  #NFOFile
  #PB_EventGadget

EndEnumeration

Global OpenImage
Global CopyImage
Global AboutImage

OpenImage = CatchImage(0, ?OpenImage)
CopyImage = CatchImage(1, ?CopyImage)
AboutImage = CatchImage(2, ?AboutImage)

DataSection
OpenImage:
  IncludeBinary "Open.ico"
CopyImage:
  IncludeBinary "Copy.ico"
AboutImage:
  IncludeBinary "About.ico"
EndDataSection

Declare OpenMainWindow()
Declare WinCallback(hWnd, Msg, wParam, lParam)
Declare LoadNFOFile(Filename$)

OpenMainWindow()
SetWindowCallback(@WinCallback())

Parameter$ = ProgramParameter()
LoadNFOFile(Parameter$)

Repeat
  Select WaitWindowEvent()
    Case #PB_EventGadget
      Select EventGadget()
        Case #OpenButtonImage
          NFOFile$ = OpenFileRequester("Open NFO File",  NFOFile$, "NFO Files|*.nfo", 0)
          LoadNFOFile(NFOFile$)
;         Case #CopyButtonImage
;           SetClipboardText(GetSelectedText())
        Case #AboutButtonImage
          MessageRequester("About...", "Pure NFO Viewer v1.1" + #CR_LF + "César Baptista, Portugal" + #CR_LF + "EMail: cesar-baptista@mail.telepac.pt" + #CR_LF + #CR_LF + "Thanks to 'Num3' with his 'FlatGadget'" + #CR_LF + "Thanks to 'El_Choni' with his 'RichEdit'", #MB_ICONINFORMATION + #MB_OK)
      EndSelect
    ;Case #PB_EventCloseWindow
      End
  EndSelect
ForEver

Procedure OpenMainWindow()
  If OpenWindow(#MainWindow, 0, 0, 640, 480, "Pure NFO Viewer", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
    If CreateGadgetList(WindowID(#MainWindow))
      ButtonImageGadget(#OpenButtonImage, 2, 3, 32, 32, OpenImage)
      GadgetToolTip(#OpenButtonImage, "Open")
      ButtonImageGadget(#CopyButtonImage, 37, 3, 32, 32, CopyImage)
      GadgetToolTip(#CopyButtonImage, "Copy")
      ButtonImageGadget(#AboutButtonImage, 72, 3, 32, 32, AboutImage)
      GadgetToolTip(#AboutButtonImage, "About")
      Frame3DGadget(#MainFrame3D, 0, 38, 640, 440, "", #PB_Frame3D_Single)
     ; OpenRichEdit(GadgetID(#MainFrame3D), #MainRichEdit, 0, 0, 640, 440, "")
     ; RichEditFont(#MainRichEdit, "Terminal", $00000000, $00FFFFFF, 11, 0, 0, #OEM_CHARSET, #FIXED_PITCH)
     ; ChangeRichEditOptions(#ES_READONLY)
;       FlatGadget(#MainWindow)
;       FlatGadget(#OpenButtonImage)
;       FlatGadget(#CopyButtonImage)
;       FlatGadget(#AboutButtonImage)
    EndIf
  EndIf
EndProcedure


; Procedure LoadNFOFile(Filename$)
;     If Filename$
;         StreamFileIn(FileName$, #SF_TEXT) 
;     EndIf 
; EndProcedure
; ExecutableFormat=Windows
; EnableAsm
; EnableNT4
; IDE Options = PureBasic 4.61 (Windows - x86)
; CursorPosition = 84
; FirstLine = 36
; Folding = -
; UseIcon = C:\Program Files\PureBasic\Projects\Pure NFO Viewer\Pure NFO Viewer.ico
; Executable = C:\Program Files\PureBasic\Projects\Pure NFO Viewer\Pure NFO Viewer.exe
; DisableDebugger

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Verfasst: 01.06.2015 17:55
von Kiffi
udg hat geschrieben: Leider kommen in PB 5.3 Fehler ...
... die da lauten?

Grüße ... Peter

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Verfasst: 02.06.2015 02:48
von udg
zeile 68: Constant not found: #PB_Frame3D_Single --> habe ich geändert in :#PB_Frame_Single --> geht

neuer Fehler:
The Procedure'LoadNFOFile()' has been declared but not defined

Procedure, Zeile 81 bis 85 aktiviert:
neuer Fehler:
StreamFileIn() is not a function, array,list,map or macro

hinzugefügt:
Declare StreamFileIn()

neuer Fehler:
StreamFileIn(): Incorrect number of Parameters

und nun weis ich nicht weiter.


Gibt es eine #PB oder #SF Konstante UNICODE ? die ich dem :
EditorGadget(#Editor_Nfo, 45, 426, 620, 80) zuweisen kann, damit die Zeichen so dargestellt werden
wie im PureNFO Viewer?:

Bild

gruß

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Verfasst: 02.06.2015 05:30
von Imhotheb
eigentlich müsste es mit der richtigen Schriftart, d.h. feste Breite und alle Ansi-Zeichen enthalten, wie z.B "Consolas" unter Win, funktionieren. Dazu mit LoadFont() die Schriftart laden und im Editorgadget verwenden

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Verfasst: 02.06.2015 09:05
von shadow

Code: Alles auswählen

RichEditFont(#MainRichEdit, "Terminal", $00000000, $00FFFFFF, 11, 0, 0, #OEM_CHARSET, #FIXED_PITCH)
Es geht um den OEM-charset, den du verwenden musst.
Siehe auch http://de.wikipedia.org/wiki/Codepage_437.

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Verfasst: 02.06.2015 20:37
von udg
@shadow

die Zeile RichFont hatte ich schon ausprobiert, leider bekomme ich eine Fehlermeldung bei meinem verwendeten code.
mein code snip:

Code: Alles auswählen

EditorGadget(#Editor_Nfo, 45, 426, 620, 80)
      RichEditFont(#Editor_Nfo, "Terminal", $00000000, $00FFFFFF, 11, 0, 0, #OEM_CHARSET, #FIXED_PITCH)
erzeugt mir diesen Fehler:
RichEditFont() is not a function, array, list, map or macro

PB 5.3

@imhothep

Code: Alles auswählen

EditorGadget(#Editor_Nfo, 45, 426, 620, 80);,#PB_Editor_WordWrap);x;y;länge;höhe
      SetGadgetFont(#Editor_Nfo, LoadFont(#Font_Editor_Nfo_NFO, "Consolas", 10, #PB_Font_HighQuality)) ; Button Font
leider nix. kopiere ich ein ascii Bild in das Editor Fenster wird es nur als normale Buchstaben angezeigt. Speichere ich jedoch die Datei als NFO aus meinem Tool raus, wird dann in der NFO das Bild wieder richtig dargestellt mit all seiner NFO Pracht.

Ich habe das Problem noch nicht erfassen können wie ich dem EditorGadget klarmache, dass es mir die ascii Art ,siehe Bild richtig anzeigt :(

Kompletter Code: Letzter Post.

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Verfasst: 03.06.2015 01:16
von NicknameFJ

Code: Alles auswählen

;EnableExplicit (schalte ich es an ,spinnt PB rum, darum aus

Code: Alles auswählen

EnableExplicit ;(schalte ich es an ,spinnt PB rum, darum aus

Define cursorpos.Point
???


NicknameFJ

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Verfasst: 03.06.2015 02:35
von udg
NicknameFJ hat geschrieben:

Code: Alles auswählen

Define cursorpos.Point
???
NicknameFJ
danke. ich habe nur "define cursorpos" angegeben, da spinnt es natürlich rum.
:allright:

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Verfasst: 03.06.2015 06:56
von udg
Danke für die Hilfen. Ich habe es nun geschafft. Mein Code hier Funktioniert :allright:
Vielleicht sucht jemand so etwas auch, dann gern nutzen.

Download:Kompiliert als demonstrations-EXE mit etwas Musik darunter

NEUESTE VERSION LETZTE SEITE

Screenshot vom Tool:

Bild

Re: [GELÖST / SOLVED] Richtige Darstellung von Ascii art NFO

Verfasst: 03.06.2015 13:19
von matbal
NFO-Dateien benutzen die Codepage 437. Um eine Datei mit dieser Schrift korrekt anzuzeigen, habe ich einfach eine Ersetz-Tabelle für alle ASCII-Zeichen über 128 erstellt.

In der IDE muß das Dateiformat auf UTF8 und die Compileroptionen auf Unicode-Executable gestellt sein.

Code: Alles auswählen

EnableExplicit 

Structure CharField
   c.c[0]
EndStructure

Procedure.s CP437(String$)
   Protected *r.CharField = ?TableCP437   
   Protected *c.character = @String$      
   
   While *c\c                          
      If *c\c >= 128                   
         *c\c = *r\c[*c\c-128]         
      EndIf
      *c + SizeOf(character)           
   Wend
   ProcedureReturn String$
   
   DataSection
      TableCP437:
      Data.s "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ "
   EndDataSection
EndProcedure

Procedure Resize()
   ResizeGadget(0, 0, 0, WindowWidth(0), WindowHeight(0))
EndProcedure


Define Pfad$ = "D:\PureBasic_Source\Pure NFO Viewer\ar.nfo"
Define Text$

If ReadFile(0, Pfad$)
   Text$ = ReadString(0, #PB_Ascii|#PB_File_IgnoreEOL)
   CloseFile(0)
   
   If OpenWindow(0, 0, 0, 600, 600, "Window", #PB_Window_SystemMenu|#PB_Window_SizeGadget)
      BindEvent(#PB_Event_SizeWindow, @Resize(), 0)
      SmartWindowRefresh(0, 1)
      
      EditorGadget(0, 0, 0, 600, 600)
      SetGadgetFont(0, LoadFont(0, "Consolas", 10))
      
      SetGadgetText(0, CP437(Text$))
      
      Repeat
      Until WaitWindowEvent() = #PB_Event_CloseWindow
   EndIf
EndIf