D2010 Unicode problemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
dpcmsx
Üye
Mesajlar: 22
Kayıt: 06 Eyl 2011 04:25

D2010 Unicode problemi

Mesaj gönderen dpcmsx »

Merhaba Arkadaşlar,

Eski bir projeyi içine Rusça, Çekçe ve Lehçe eklemek için Delphi7'den Delphi2010 aktardım. Bu aktarmada formları yeniden oluşturdum ve sadece kodu aynen aldım. Sonra bütün stringleri Ansistring olarak değiştirdim. Aynen Char değişkenlerini Ansichar yaptım. Son olarak dosya içinde arama yapan bir program olduğundan test ettiğimde arama yapmadığını gördüm. Bir süre araştırdıktan sonra PosEx komutunun başlangıcının D7 gibi 0 değilde 1 olması gerekiyormuş, düzelttim. Program Türkçe ve İngilizce yüklü bütün sürümlerde çalışıyor.

Fakat Çekçe (gönderdiğim birisinde test ettim) bir işletim sisteminde bulması gerekenleri (yüklenen dosyanın içinde önceden tanımlı hex stringleri) bulmuyor. Kontrol ettim, döngü tamamen Ansi üzerinden geliyor. Oysa aynı kopya benim bilgisayarımda hiçbir sorun olmadan çalışıyor.

- Çekçe veya diğer dillerin Unicode olarak menüye, mesaj kutularına yansımasından hiçbir sorun yok.
- Delphi 2010'da stringlerin Unicode olduğunu bildiğim için hepsini Ansistring yaptım.


Kullanıcının bilgisayarına bağlanıp orada da çalıştım fakat bir türlü sonuç alamadım.

Aşağıdaki bu procedure Türkçe ve İngilizce işletim sistemlerinde gayet güzel çalışıyor. Ama Unicode diller (Çekçe ve büyük ihtimalle Lehçe) dillerinde PosEx ile arama işlemi hep 0 oluyor. İşin içinden çıkamadım maalesef ve sormaya karar verdim.

Kod: Tümünü seç

Patch Proc V1.0
----------------------------------------------------
filebuf = File buffer
sstr = Search string
pfar = patch point far from finding point
pval1, pval2 = patch bytes
psize = patch size, if 0 patch until end1 and end2 byted
end1, end2 = patch limited sign if psize = 0
posnext = start point for PosEx search command
fpath = Full path loaded file
fsize = Filesize loaded file
}
Procedure PatchPro(var filebuf:Ansistring; sstr:Ansistring; pfar: integer; pval1: byte; pval2:byte; psize: integer; end1:byte; end2:byte; posnext:integer; fpath : Ansistring; fsize:integer);
var

  sstr2, filebuf2,fpath2 : Ansistring;
 pbool: Boolean;
 
begin

   sstr2 := sstr;
   filebuf2 := filebuf;
   fpath2 := fpath;

  if posnext = 0 then inc(posnext);


try
  pbool := False;
  posnext := lastpos;


  c := PosEx(AnsiString(sstr2),AnsiString(filebuf2),posnext);
  if c = 0 then
  begin
    Form1.sMemo1.Lines.add(im(07)+IntToStr(findcount)+ im(08));  // ortak mesajlar
    findkey := False;
   exit;
  end;

  if c <> 0 then
  begin
    if meskey = False then goto p2;

//Dosyayı patchleme kısmı
...

Cevapla