Richedit içine Arapça text yerleştirmek

Başlatan z, 11 Ağustos 2014, 02:21:25

z

İki adet "RichEdit" den 1.sine dosyadan Arapça bir metin yüklüyorum.

Ardından 1. "RicEdit"in satırlarını her defasında string içine okuyup 2.RichEdit içine satır satır yazıyorum.

1. RichEdit de Arapça metni görebilirken 2. RichEdit içinde sadece ? karakterleri görüyorum.

Nerede hata yapıyorum?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

trinity

Araya string değişkeni girmeden birebire 2. RichEdit aktarma yapınca aynı sorun oluyor mu?

1.ihtimal Richedit arapça karakterleri stringe aktarırken bozuyor
2.ihtimal Richedit yalnızca dosyadan arapça okuyor, stringten arapça font desteği veremiyor.


z

İkinci RichEdit içine de dosyadan okursam onda da arapça karakterler çıkıyor.

Eğer Ikinci.text:=Birinci.text dersem gene tüm harfler gene ? olarak çıkıyor.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

trinity

#3
Bu fonksiyon işine yarayabilir.

function GetRTFText(oRE: TRichedit): String;
var
         oSS : TStringStream;
begin
         oSS := TStringStream.Create('');

         oRE.PlainText := False;
         oRE.Lines.SaveToStream(oSS);
         Result := oSS.DataString;
         oSS.Free
end;


//Örnek: Richedit1 den Richedit2 ye Text kopyalama

Richedit2.Text := GetRTFText(Richedit1);

z

Sağolasın bu işimi gördü.

Peki şu soruma da çözüm bulabilirmiyiz?

Arapça metinden herhangi bir satırı okuyacağım. Ardından bu satırdaki karakterlerin sıra ile ne olduklarını öğrenmem gerekiyor.

Standart ASCI karakterlerde sorun yok. Fakat işin içine Türkçe karakterler girince string değişkene okunan komple satırdan tek tek karakterlere (Türkçe karakterlere) ulaşmakta sorun yaşıyordum.

Arapça karakterlerde bir satırdaki karakterlere tek tek nasıl ulaşacağım?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Hocam bu devirde Delphi 6 mı kullanılırmış. Delphi 7 kullanıyorum artık.  :)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

engerex

 Anlaşılan Delphi 7 kullanıyorsun.
Değişken tipini WideString veya UnicodeString dener misin?

z

#7
بسم الله الرحمن الرحيم

Mesela yukarıdaki satırda kaç karakter var, sıra ile karakterler nelerdir bunu bulan kod parçası verebilirmisiniz?

Her bir harfin tek bir ASCI karakterden oluştuğu metinlerde her bir harfe S[1], S[2].. şeklinde kolayca ulaşabiliyordum. Arapça metinde böyle kolay olmayacak galiba.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Karamel


trinity

#9
var 
arapca : string;
harfler : array of string;
harfsayisi: integer;
i: integer;

arapca:= GetRTFText(Richedit1);
harfsayisi := Length(arapca);

for i := 0 to harfsayisi do
begin
harfler[i] := Copy(arapca,i,1);
end;


burda bütün harfler sırayla harf[] dizisine tek tek yazılır. bende delphi 7 yüklü olmadığı için kesin konuşamıyorum

z

arapca:= GetRTFText(Richedit1);

Yukarıdaki satır headerı text dekorasyon verilerini vs hepsini getirdi haliyle işe yaramadı.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com


z

Kimse yardımcı olamayacakmı

Sorunumu daha açık izah edeyim.

Herhangi bir satırda sağdan sola Elif, Be, Te, Se harfleri yanyana gelmiş olsun.

Öncelikle bu satırı bir değişkene okumak istiyorum.

Sonra
1. karakterin Elif,
2. karakterin Be,
3. karakterin Te,
4. karakterin Se,

olduğunu görmek (öğrenmek) istiyorum.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Karamel

Alıntı yapılan: kutahyaspor - 11 Ağustos 2014, 17:04:49
19

hocam ben arapca bilmiyorum. windows mantiginda arapca kelimenin sol ilk karakterini mouse un sol tusu ile sectim. shift + sag-sol tuslari ile (teker teker karakter secimi yapar) sectim. bunlarida saydim. 22 oldu.

engerex

AnsiString ile 1 harf 1 bayt olmayacak. Yani her harf 2 bayt ile temsil ediliyor. Öncelikle dosyanın ilk 2 baytı FF FE , boşluk 20 00 , arapça harfler genelde xx 06 şeklinde, nokta ise 2E 00 şeklinde temsil ediliyor. Yani bayt bayt değil 2 bayt 2 bayt okuyacaksın. Hangi karekterin hangi baytlarla temsil edildiğini görmek için Başlat > Çalıştır > charmap > Karakter seti : Windows Arapça (yada daha fazla karakter için Grup: Unicode > Arapça)
Harflerin başta sonda ortada olma durumu var. Bunların karakteri farklı mı yazılıyor yoksa metin editörü otomatik mi oluşturuyor? Buna dikkat.