[Delphi] Kompilacja w Windows 7 ->uruchomienie pod innym

0

Witam.. Mam dosyć poważny problem, bo dziadek google nie chce mi pomóc ;/

Otóż po kompilacji w Delphi 7 PE pod Windows 7 (beta Ultimate) wszystko jest pięknie...
Ale niestety - po uruchomieniu execa gotowego w środowisku innym niż Windows 7 (np. pod Windowsem XP) brak jest Polskich znaków ;/ Najczęściej zamienia je na "?", czy cyfry... (np. "Włącz funkcję sprzężenia" wyglądać może np jak "W3acz funkcj? sprz??enia")... Nie wygląda to wiec zbyt elegancko...

Można jakoś na to zaradzić?

ZGTHX, Pozdrawiam serdecznie

0

a domyslna czcionka i zestaw znakow na co ustawione ?

0
  • MS Sans Serif Środkowoeuropejski
  • imDontCare
    no i tyle, jeżeli chodzi o rzeczy ustawione w kontrolce... W systemie mam ofc włączone domyślnie Polski - klawiatura Programisty...

@Edit: hm... zastanawiam się czy może coś z OEMConvert pozmieniac... :(

0

Chyba już wiem, o co może chodzić!

Mam plik *.dfm w którym zapisywane są wszelakie stringi KOMPONENTÓW (ponieważ nie dotyczy to w ogóle kodu źródłowego - tam wszystko z czcionkami jest OK...)
A oto treść pliku:

Po skompilowaniu w Win XP:
object Label3: TLabel
Left = 32
Top = 264
Width = 104
Height = 13
Caption = 'Niech zawieraj'#261' tekst:'
end

ą więc = 261

a teraz po kompilacji w Win 7:
object Image1: TImage
Left = 0
Top = 0
Width = 42
Height = 83
Hint = 'Kliknij, je'#191'eli chcesz tymczasowo wy'#179#185'czy'#230'
AutoSize = True

ą więc = 185

Czyli jakiś **!@)(@3-^ pozamieniał znaki kodów Polskich w poszczególnych systemach -.-' Po uruchomieniu w Windows 7 programu skompilowanego w Windows XP brak jest Polskiej czcionki, ale wygląda to następująco: Niech zawieraja tekst, czyli wmiarę przezwoicie...

Ale można to jakoś w Win 7 naprawić??
@Edit: Pomysł jest bardzo prosty... Niech mi Delphi nie zapisuje w pliku
Caption = 'Niech zawieraj'#185' tekst:'
a
Caption = 'Niech zawierają tekst:' bo tak działa... ;|

0

Proszę o pomoc... Już próbowałem zrobić program nawet do tego (

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, JvBaseDlg, JvSelectDirectory;

type
  TForm1 = class(TForm)
    JvSelectDirectory1: TJvSelectDirectory;
    src: TEdit;
    Button1: TButton;
    Button2: TButton;
    lista: TListBox;
    txt: TMemo;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function FindFiles(const Path, Mask: string; IncludeSubDir: boolean; var lst:TStrings): integer; 
var 
 FindResult: integer; 
 SearchRec : TSearchRec; 
begin 
 result := 0; 

 FindResult := FindFirst(Path + Mask, faAnyFile - faDirectory, SearchRec); 
 while FindResult = 0 do 
 begin 
   { do whatever you'd like to do with the files found } 
   lst.Add(Path + SearchRec.Name); 
   result := result + 1; 

   FindResult := FindNext(SearchRec); 
 end; 
 { free memory } 
 FindClose(SearchRec); 

 if not IncludeSubDir then 
   Exit; 

 FindResult := FindFirst(Path + '*.*', faDirectory, SearchRec); 
 while FindResult = 0 do 
 begin 
   if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then 
     result := result + 
       FindFiles (Path + SearchRec.Name + '\', Mask, TRUE, lst); 

   FindResult := FindNext(SearchRec); 
 end;
 { free memory } 
 FindClose(SearchRec); 
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if JvSelectDirectory1.Execute then src.Text:=JvSelectDirectory1.Directory;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
l:TStrings;
i:cardinal;
begin
l:=TStringList.Create;
FindFiles(src.Text+'\', '*.dfm', False, l);
lista.Items:=l;
for i:=0 to lista.Items.Count-1 do begin
txt.Lines.LoadFromFile(lista.items[i]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('ą')), 'ą', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('ę')), 'ę', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('ś')), 'ś', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('ż')), 'ż', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('ź')), 'ź', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('ć')), 'ć', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('ń')), 'ń', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('ł')), 'ł', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('ó')), 'Ó', [rfReplaceAll]);

txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('Ą')), 'Ą', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('Ę')), 'Ę', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('Ś')), 'Ś', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('Ż')), 'Ż', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('Ź')), 'Ź', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('Ć')), 'Ć', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('Ń')), 'Ń', [rfReplaceAll]);
txt.Text:=StringReplace(txt.Text, '#'+IntToStr(ord('Ł')), 'Ł', [rfReplaceAll]);
txt.Lines.SaveToFile(lista.items[i]);
end;
Application.Terminate;
end;

end.

)

no ale zaprzestałem bo w sumie musiałbym ten plik parsować, żeby to wszystko dobrze działało, więc.... ;/

0

Update Advisor zgłasza że Delphi 7 oraz BCB 6 są nie kompatybilne z windowsem 7 .

Moja rada :
Póki nie pojawi się Patch stosować albo inny system albo odpalić wirtualną wersje XP
na VirtualBox . (druga opcja lepsza w przypadku dobrego kompa ).
Może pojawią się jakieś Patch'e . póki co czekać trzeba.

0

Dzięki ;)

Fakt, fakem, po prostu przerzuciłem się na Delphi 2010 + odznaczenie Text DFM i działa :)

0

Mogę potwierdzić to samo zachowanie z Delphi7 oraz Windows7. Chodzi o to że przy zapisywaniu DFMa delphi7 w windows7 zapisuje te znaki używając kodowania Win1250 (sic!!!), podczas gdy w starym poczciwym XPeku kody te były zapisywane w unicode (przykładowo litera "ą" w xp zapisywana jest do DFMa jako #260 a w win7 jako #165). Tylko litera "ó" ma taki sam kod w obu kodowaniach.
Widać to dokładnie tutaj:
http://pl.wikipedia.org/wiki/Kodowanie_polskich_znaków

Dodatkowo przy ładowaniu na Win7 projektu zapisanego w XP znaki są automatycznie konwertowane do bez-ogonkowych odpowiedników (za wyjątkiem litery "ó").
Chyba na razie nie ma na to innej rady niż przejście na nowsze delphi pod win7 :( ... a szkoda

1 użytkowników online, w tym zalogowanych: 0, gości: 1