20. oktober 2011 - 14:26Der er
7 kommentarer og 1 løsning
æøå på Lazarus
Jeg beklager at jeg bruger Delphi, når spørgsmålet er Lazarus relateret. Jeg har udviklet programmet i mange år på mit på gl. Delphi. Som alle ved, kan en 32bit Delphi med database ikke køre 64bit, derfor er Lazarus valgt som alternativ.
... og så til spørgsmålet: Hvad skal jeg gøre ved en Lazarus ver. 0.9.30.2RC1 for at programmet kan køre korrekt med æøåÆØÅ ?
Jeg har læst nogle artikler på nettet, men fattede ikke en 'meter'. Peter
Min Delphi er en ver. 4, som var med i et blad for flere år siden. DB-systemet er "Borland Database Engine (BDE)". Databasesystemet kører fint på en ren 32 maskine, men kan ikke køre på en maskine, hvor der også er 64 bit.
"Hvad er det lidt mere specifikt at din Lazarus gør eller nærmere ikke gør ?": Hvis jeg skal sammenligne 2 ord, hvor der både er aøå og ÆØÅ, er det jo nødvendigt enten at omformatere med LowerCase eller UpperCase for at kunne sammenligne.
F.EKS et testet forsøg: procedure TForm1.PrepareSearch(var S : String); var I : Integer; A : String; begin // Forsøg 1. - S := 'ÆæØøst' A := ''; for I := 1 to length(S) do begin A := A + LowerCase(S[I]); end; // Resultet S = 'ÆæØøST' (kun "ST" er nu store bogstaver
// Det andet forsøg - (NB!S er aflæst til 'ÆæØøst') // Forsøg 2. - S := 'ÆæØøst' A := ''; Repeat // Efter 1. repeat burde S blive 'æØøst' if Copy(S, 1, 1) = 'æ' then begin A := A +'Æ'; Delete(S, 1, 1); Continue; end; if Copy(S, 1, 1) = 'ø' then begin A := A +'Ø'; Delete(S, 1, 1); Continue; end; if Copy(S, 1, 1) = 'å' then begin A := A +'Å'; Delete(S, 1, 1); Continue; end; A := A + Copy(S, 1, 1); // Første gang, at denne passeres bliver A = '?' i stedet for "Æ" Delete(S, 1, 1); // og her skal S = 'æØøst', men bliver S bliver "?æØøst". until S = ''; S := A; end;
OK - BDE fungerer nu ganske fint på Windows 7 64 bit hvis man lige finder den rigtige installationsfil til det. Jeg har haft det til at køre tidligere da jeg havde brug for det.
Virker AnsiCompareText ikke til at sammenligne dine tekster? Den er mig bekendt CI
Hej Hugo og Arne Alle jeres forslag virker i min PC, hvis sætningerne IKKE indeholder ÆØÅ og disse enten skal konverteres til store el. små bogstaver. Det er pokkerme irriterende for det samme virker fint i mit gl. Delphi. Peter
Her er løsningen: ----------------- AnsiCompareText(UTF8ToAnsi('æøåXÆ'), UTF8ToAnsi('æøÅxæ'))
Med nedenstående bliver Label1.Caption = 0 i Lazarus som sammenligning, hvilket ikke har været muligt i Lazarus, men i Delphi, hvis der manglede "UTF8ToAnsi".
Resultatet bliver 0, hvad enten det er rent store bogstaver eller en blanding.
Jeg skal også lige rette en tak til: Benny Christensen, Løsning
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.