Autor Beitrag
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Di 06.01.09 21:58 
Mein Problem ist, das ich gerne Unicode-Zeichen in ein Richedit-Feld einfügen würde. Weil die VCL bekanntlich nicht Unicode-kompatibel ist würde ich es auch mit JvRichedit machen.

Leider habe ich keinen Plan wie ich Delphi anweisen kann die Zeichen zu erzeugen. Konkret geht es um ♠♣♥♦. (Kartenfarben). Ich möchte vermeiden diese als Grafik einbinden zu müssen.

Bisher habe ich damit rumexperimentiert, diese Zeichen ganz einfach per readln() in eine Widestring-Variable einzulesen und dann per Richedit.text := richedit.text + wsvariable; dranzuhängen... geht auch, sogar mit TRichEdit, aber sobald ich weitere Zeichen dranhängen will gibt es nur noch Buchstabensalat.

Irgendein Trick für TRichEdit wär mir am liebsten, da es nur um die 4 Zeichen geht, aber ansonsten wär ich auch für jeden Tipp bezüglich JvRichEdit dankbar, wo es ja vermutlich ganz einfach ist - in dem Fall bräuchte ich sowas wie chr(169) nur eben für die Unicode-Werte der oben genannten Zeichen. Wird ja mit chr vermutlich nicht funzen.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 06.01.09 22:01 
Am besten du speicherst die 4 Zeichen in WordPad als RTF ab und schaust nach, wie es codiert wurde.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 06.01.09 22:06 
Oder schau dir mal TNT/TMS-Unicode oder EiPack an

_________________
Markus Kinzler.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 06.01.09 22:08 
... oder du zeichnest das Zeichen einfach selbst mit Windows.DrawTextW o.ä.
Tilman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Di 06.01.09 22:25 
E2 99 A6 ergab der Hexeditor, jedoch

ausblenden Delphi-Quelltext
1:
2:
3:
  display.Text := display.Text + chr(226);
  display.Text := display.Text + chr(153);
  display.Text := display.Text + chr(166);


blieb erfolglos. Danke für den Tipp mit DrawTextW das werd ich jetzt mal ausporbieren.

//Achso ne sry, war gar nicht RTF sondern als TXT... werde jetzt nochmal versuchen die RTF-Kodierung einzubauen...

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Tilman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Di 06.01.09 23:09 
Nach dem Motto "Nicht schön, aber dafür hässlich" klappts jetzt, mit TRichEdit und ohne Jedi: habe eine cards.txt erstellt im Unicode-Format und lade diese, und verwende dann diesen furchtbaren Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  richedit1.Lines.LoadFromFile('cards.txt');
  richedit1.SelStart := 0;  // bzw. 1 für pik, 2 für kreuz... 
  richedit1.SelLength := 1;
  richedit1.CopyToClipboard;
  display.PasteFromClipboard;


(richedit1 ist dabei ein Hilfs-TRichEdit, display das eigentliche)
Jetzt muss ich mir nur noch was einfallen lassen wie ich sicherstelle dass die Zwischenablage des Anwenders gesichert wird.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 07.01.09 01:05 
Ich habe mal eine Demo geschrieben wie es ganz gut klappt. Und vor allem ohne die Zwischenablage zu missbrauchen. ;-)
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
const
  RTFString = '{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fcharset0 Arial;}}'
    + #13#10 + '{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\f0\fs20 %s'
    + #13#10 + '}';
  AdviceString = 'Schreibe unten deinen Text!\par'
    + #13#10 + 'Dabei ersetze \u9824? durch !!PIK!!, \u9827? durch !!KREUZ!!, \u9829? durch !!HERZ!! und \u9830? durch !!KARO!!, danach klicke den Button rechts!\par';
  CodePlaceHolder: array[0..3of string = ('!!PIK!!''!!KREUZ!!''!!HERZ!!''!!KARO!!');
  Code: array[0..3of string = ('\u9824?''\u9827?''\u9829?''\u9830?');

[...]

procedure DisplayRTFCode(uCode: string; uRichEdit: TRichEdit);
var
  Stream: TStream;
begin
  Stream := TStringStream.Create(uCode);
  try
    Stream.Position := 0;
    uRichEdit.Lines.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

procedure TfrmMain.btnStartClick(Sender: TObject);
var
  tmp: string;
  i: Integer;
begin
  tmp := memInput.Text;
  for i := 0 to High(CodePlaceHolder) do
    tmp := StringReplace(tmp, CodePlaceHolder[i], Code[i], [rfReplaceAll]);
  DisplayRTFCode(Format(RTFString, [tmp]), redtOutput);
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  DisplayRTFCode(Format(RTFString, [AdviceString]), redtAdvice);
end;
Damit kannst du beliebige Zeichen in beliebigem Text darstellen. :D
Einloggen, um Attachments anzusehen!
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mi 07.01.09 12:30 
Hallo,

und so kannst Du ein Pik an der Cursorposition in das Standard-RichEdit einfügen:

ausblenden Delphi-Quelltext
1:
RichEdit1.SelText := '{\rtf1{\fonttbl{\f0\fcharset0;}}\u9824\''3f}';					

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Tilman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mi 07.01.09 16:44 
Hey, super, vielen dank an euch beide! Ihr habt mihr sehr geholfen!

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)