Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz:combobox charset 2011 júl. 29 19:20 #799

  • JUHFE
  • JUHFE profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Helló CSUPA X!

Múlt vasárnap ráértem és letöltöttem a Lazarus 9.31 béta verzióját.
Amíg installálgattam, gondolkoztam,
(azért írom ide, mert ritka esemény … a válaszodból látom, hogy nálad is az)
Tudod arra számítottam, hogy se perc alatt kihámozod a valóban hosszadalmas kód lényegét és kigondolsz egy függvényt vagy eljárást,amivel azután a Windows környezetben az ANSI Txt fájlokat kérdőjelek nélkül használhatod az UTF8 Lazarusban.
Szóval, csináltam Neked egyet. Lehet, hogy az lesz a válaszod, hogy
...Miért nem csináltam inkább sámlit?! Megreszkírozom.
Ide másolom, talán hasznát veszed.

üdv: JUHFE.

procedure TForm1.SetFileTextUTF8(const longname: String = '');
var
li: TStringList;
begin
li:= TStringList.Create;
li.LoadFromFile(UTF8ToANSI(longname));
if Length(li.Text) = Length(UTF8ToANSI(li.Text)) then
li.Text:= ANSIToUTF8(li.Text);
li.SaveToFile(UTF8ToANSI(longname));
li.Free;
end;

Válasz:combobox charset 2011 júl. 24 08:10 #797

  • metaxx
  • metaxx profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 4
  • Köszönetek: 0
nem gáz mert csak 5db txt-m volt úgyhogy 2percembe ha került :)

Válasz:combobox charset 2011 júl. 24 08:08 #796

  • JUHFE
  • JUHFE profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Helló!

Nagy tévedésben vagy!
A konverziót win nótepad is megcsinálja.
A mentés másként... gombot kell megnyomni!..
és a párbeszéd ablakban az alábbi lehetőségek közül lehet választani:
1. ANSI
2. Unicode
3. Csökkenő helyiértékü (big endian) Unicode
4. UTF-8
...de, ha minden Windows ANSI környezetből származó irományt valamelyik
külső programmal konvertálgatsz az nagyon fárasztó lehet.
A Lazarusnak nem kell külső segítség.
Ez a verzió következetesen UTF-8 és a karakter konverzióra vannak jó függvényei.

Üdv: JUHFE

Válasz:combobox charset 2011 júl. 24 04:13 #795

  • metaxx
  • metaxx profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 4
  • Köszönetek: 0
Uh nagyon köszönöm, hogy ennyit fáradtál de hála égnek sikerült megoldanom idő közben, egy sor kód nélkül. Nevezetesen letöltöttem egy Notepad++ benyitottam a txt-ket, konvertálás utf8-ra, és már ment is. Csak azt nem értem, hogy win notepad miért nem csinálta meg? Dilinyós. :)

Válasz:combobox charset 2011 júl. 23 15:42 #794

  • JUHFE
  • JUHFE profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
{
Windows XP Jegyzettömb által létrehozott,
ANSI névsor betöltése a Lazarus ComboBoxba.
}
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
ComboBox1: TComboBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
{A teszteléshez használt 'névsor.txt' szövege:
árvíztűrő tükörfúrógép
ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP
különc művésztől túlzó írás
KÜLÖNC MŰVÉSZTŐL TÚLZÓ ÍRÁS
lányért síró önző nyúlfülű
LÁNYÉRT SÍRÓ ÖNZŐ NYÚLFÜLŰ
tüskéshátú kígyóbűvölő
TÜSKÉSHÁTÚ KÍGYÓBŰVÖLŐ}
{ A Konverzió: (..de a profi programozók most ne figyeljenek!)}
procedure TForm1.Button1Click(Sender: TObject);
var
ls: TStringList;
begin
ls:= TStringList.Create;
{UTF8->ANSI}
ls.LoadFromFile(UTF8ToANSI('névsor.txt'));{az ékezetes fájlnevet ANSI-ra kell alakítani,mert az ANSI windowsban az UTF-8 fájlnevet nem találja meg a Lazarus!}
{HA ANSI}
if Length(ls.Text) = Length(UTF8ToANSI(ls.Text)) then
{ANSI->UTF8}
ComboBox1.Items.SetText(PChar(ANSIToUTF8(ls.Text)))else
{HA UTF8}
ComboBox1.Items.SetText(PChar(ls.Text));
ComboBox1.ItemIndex:= 0;
ls.Free;
end;
{A névsort az ANSI->UTF8 konverzió után a Button2 UTF-8 ra menti}
procedure TForm1.Button2Click(Sender: TObject);
begin
ComboBox1.Items.SaveToFile(UTF8ToANSI('névsor.txt'));
end;
{A konerzió és a visszamenés után bármelyik gomb nyomkodható.
A 'névsor.txt' UTF-8 kódolású marad.}
procedure TForm1.FormShow(Sender: TObject);
begin
ComboBox1.Items.LoadFromFile(UTF8ToANSI('névsor.txt'));
ComboBox1.ItemIndex:= 0;
end;
end.

Talán tudtam segíteni. Üdv: JUHFE

Válasz:combobox charset 2011 júl. 18 10:19 #793

  • metaxx
  • metaxx profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 4
  • Köszönetek: 0
Köszönöm a választ, de sajnos nem hozott eredményt. A szövegfájt minden lehetséges kódolással elmentettem, az IDE-n minden lehetséges kódolás típust kipróbáltam, Arial, Times betűkkel rákerestem arra amit javasoltál itt: wiki.lazarus.freepascal.org/LCL_Unicode_Support

remek példa, de sajnos nem hozott eredményt. Tanácstalan vagyok.

Szerk.:

Ha valaki belefutna ilyenbe, akkor itt a megoldás. Letöltöttem egy notepad++ -t benyitottam a txt fájlt, megmondtam neki, hogy kódolás átalakítása utf-8-ba, mentettem, Lazarussal újra beolvastattam, és már működött is. Amit MS Notepad nem tudott megcsinálni notepad++ simán.

Válasz:combobox charset 2011 júl. 17 17:29 #792

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
Próbáld meg a szövegfájl tartalmát betöltéskor UTF8 kódolásúvá átalakítani.
A Lazarus ezt a kódolást használja a belső műveletekben, de a kívülről jövő adatok átalakítását nem végzi el automatikusan.
Javaslom a FileUtil unit-ban található eljárásokat:
//a Windows programokban előállított szövegekhez
function UTF8ToSys(const s: string): string;
function SysToUTF8(const s: string): string; // <<======== ;)
//a konzolban (parancsor) előállított szövegekhez:
function ConsoleToUTF8(const s: string): string;
function UTF8ToConsole(const s: string): string;
A szövegfájl tartalma soronként keröljön beolvasásra, nagyjából így:
AKomboBoksz.Items[SorSzamlalo]:=SysToUTF8(ABeolvasottSor);
Nem próbáltam ki de elvileg működnie kell...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

combobox charset 2011 júl. 16 11:16 #791

  • metaxx
  • metaxx profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 4
  • Köszönetek: 0
Szervusztok!

Olyan problémám van, hogy Form.Show-nál egy txt tartalmát betöltöm egy combobox-ba, a következőképp:
ComboBox3.Items.LoadFromFile('.\adatok\partnerek.txt');

Eddig rendben is van, de ha a szövegfájl tartalmában van magyar ékezetes karakter, akkor a Combo-ban csak ?-ek szerepelnek helyette. Próbáltam a FontCharSet-et defaultról, unicode-ra, ansi-ra easterneuropean-ra, mindenre. Az eredmény ugyanaz. A txt notepad-al létrehozott, elvileg alapértelmezetten ansi-ba ment, ezért nem értem. Valakinek van ötlete esetleg?

Köszönöm.

  • Oldal:
  • 1