xsharp.eu • Rp2 mit Unicode
Page 1 of 2

Rp2 mit Unicode

Posted: Sat Apr 27, 2019 9:29 am
by MSZoll
Hallo,
Ich habe meine Vo in XSharp übernommen und muß jetzt Unicode nutzen,
hat wer einen Plan, wie ich einfach in RP2 Unicode nutzen kann?
Oder gibt es eine genauso einfachen Report-Generator mit DBF der Unicode kann?
LG Michael

Rp2 mit Unicode

Posted: Sat Apr 27, 2019 9:42 pm
by wriedmann
Hallo Michael,

mit RP2 dürfte das nicht so einfach funktionieren, da intern ANSI-basierte Windows-API-Aufrufe genutzt werden.

Leider kann ich Dir auch keinen Report-Generator nennen, der DBF und Unicode unterstützt, und ich habe meine Zweifel, ob es sowas überhaupt gibt.
Aber an und für sich ist das DBF-Format doch auch nicht Unicode-fähig.

Wolfgang

Rp2 mit Unicode

Posted: Sat Apr 27, 2019 10:04 pm
by MSZoll
Hallo Wolfgang,
Ich habe unicode mit dbf mit code64 umgesetzt,
Das funktioniert wunderbar.
Wie könnt ich am einfachsten einen normalen
Druck programmieren?
Gruss Michael

Rp2 mit Unicode

Posted: Sun Apr 28, 2019 1:29 am
by wriedmann
Hallo Michael,

da hast Du einen Sonderweg gefunden, den vermutllich kein Tool so von Haus aus unterstützen dürfte.
Phil Hepburn hat Artikel drüber geschrieben, wie man mit .NET Bordmitteln das Drucken angehen kann: http://enotes.xsharp.it/enotes/ReportsNPrinting_81b.chm

Ansonsten fällt mir nur ein Drucktool ein, das die Datenbeschaffung komplett dem Programmierer überlässt: List&Label. Ist nicht ganz billig, aber doch leistungsfähig.

Ich habe meinen eigenen Reportwriter geschrieben, der aber VPE von Ideal Software nutzt. Daher bin ich, was Drucken betrifft, vielleicht nicht ganz die richtige Person.

Ich würde mal warten, ob sich vielleicht Robert dazuzmeldet und eine Lösung für ReportPro hat.

Wolfgang

Rp2 mit Unicode

Posted: Sun Apr 28, 2019 6:13 am
by robert
Wolfgang, Michael,

When the fields are specially encoded in the DBF with Base64 encoding you need at least to manually decode that.
W.r.t. ReportPro and Unicode:
- RP2 and RP3 are programmed against ANSI API Calls. They both use an ANSI UI Layer (VO GUI for RP2 and Classmate GUI for RP3).
Once we have a new VO compatible UI based on winforms I will have a look at how much work it is to migrate the RP2 reporting code (which uses DrawText, DrawLine and similar API calls) to Windows Forms.

Robert

Rp2 mit Unicode

Posted: Sun Apr 28, 2019 6:54 am
by MSZoll
Hello Robert,
Could you tell me the way to Decode manualy within rp2?

Rp2 mit Unicode

Posted: Sun Apr 28, 2019 12:58 pm
by robert
Michael,
How are you encoding ?
I would replace the access to the field (Alias.FieldName) with an expression MyDecode(Alias.FieldName).
To allow that in the designer you need to create a UDF library.

Robert

Rp2 mit Unicode

Posted: Mon Apr 29, 2019 8:03 am
by MSZoll
Hello Robert,
I use for Encode / Decode the following:
PUBLIC PARTIAL CLASS WindlgEingabe ;
INHERIT System.Windows.Forms.Form

PRIVATE editText := "" AS STRING
public property Editedtext as string
get
var bytes := Encoding.Unicode:GetBytes(editText)
var base64 := Convert.ToBase64String(bytes)
return base64
end get
set
try
var bytes := System.Convert.FromBase64String(value)
editText := Encoding.Unicode:GetString(bytes)
editor:Text := editText
catch
editor:Text := value
end try
end set
end property

Rp2 mit Unicode

Posted: Mon Apr 29, 2019 9:41 am
by robert
Michael,
So you need to create a function that does the same. Something like

Code: Select all

FUNCTION MyBase64Decode(cSource AS STRING) AS STRING
VAR bytes := System.Convert.FromBase64String(cSource )
RETURN Encoding.Unicode:GetString(bytes)
Create a RP UDF DLL and include this function in this DLL and in your report use something like this as expression for a field:
MyBase64Decode(Client.LastName)

The only problem that I see is that when the decoded field contains a character that is not in your current codepage. This character will be displayed as a question mark (?) in the ansi output of ReportPro.

Robert

Rp2 mit Unicode

Posted: Mon Apr 29, 2019 9:56 am
by MSZoll
Hallo Robert,
I have now build a new class to do This:
and use it in my program with:

var winBase64 := UMS_Base64{}
winBase64:Editedtext := RTrim (self:owner:server:FIELDGET (#REF_NR))
oDCsleREF_NR:value := winBase64:Editedtext


USING System
USING System.Collections.Generic
USING System.Text

CLASS UMS_Base64

PRIVATE editText := "" AS STRING
public property Editedtext as string
get
var bytes := Encoding.Unicode:GetBytes(editText)
var base64 := Convert.ToBase64String(bytes)
return base64
end get
set
try
var bytes := System.Convert.FromBase64String(value)
editText := Encoding.Unicode:GetString(bytes)
catch
editText := value
end try
end set
end property

CONSTRUCTOR()
RETURN

END CLASS