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

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

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

Beitrag 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
Zuletzt geändert von udg am 06.06.2015 16:56, insgesamt 3-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Beitrag von Kiffi »

udg hat geschrieben: Leider kommen in PB 5.3 Fehler ...
... die da lauten?

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Beitrag 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ß
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Beitrag 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
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Beitrag 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.
ThinkPad T61 (in Gedenken) | PureBasic 4.61 B1 (32) | Windows 7 (32SP1) | ArchLinux (32) | Syllable (32)
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Beitrag 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.
Zuletzt geändert von udg am 03.06.2015 07:01, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Beitrag 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:
Zuletzt geändert von udg am 03.06.2015 06:59, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: [Frage] Richtige Darstellung von Ascii art NFOs

Beitrag 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
Zuletzt geändert von udg am 07.06.2015 03:14, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

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

Beitrag 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
Zuletzt geändert von matbal am 03.06.2015 14:56, insgesamt 1-mal geändert.
Antworten