Autor |
Beitrag |
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: 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
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: 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
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Di 06.01.09 22:06
Oder schau dir mal TNT/TMS-Unicode oder EiPack an
_________________ Markus Kinzler.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Di 06.01.09 22:08
... oder du zeichnest das Zeichen einfach selbst mit Windows.DrawTextW o.ä.
|
|
Tilman 
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Di 06.01.09 22:25
E2 99 A6 ergab der Hexeditor, jedoch
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 
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: 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:
Delphi-Quelltext 1: 2: 3: 4: 5:
| richedit1.Lines.LoadFromFile('cards.txt'); richedit1.SelStart := 0; 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
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.  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..3] of string = ('!!PIK!!', '!!KREUZ!!', '!!HERZ!!', '!!KARO!!'); Code: array[0..3] of 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. 
Einloggen, um Attachments anzusehen!
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mi 07.01.09 12:30
Hallo,
und so kannst Du ein Pik an der Cursorposition in das Standard-RichEdit einfügen:
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 
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: 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)
|
|
|