Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi7 mit nur einer Unit Unicode fähig machen (https://www.delphipraxis.net/175267-delphi7-mit-nur-einer-unit-unicode-faehig-machen.html)

taaktaak 27. Jun 2016 12:10

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Moin, Moin,
in meinem Fall handelt es sich um Windows-INI-Dateien (wie auch in meinem Beispiel verwendet), die mit der heutigen Version meines IniViewers nicht gelesen werden können. Vor langer Zeit wurde hier im Forum befunden, dass dies nicht funktionieren kann, da die INI im Unicode-Format gespeichert wäre...

derMischka 27. Jun 2016 19:55

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Hallo Taaktaak,

ich sehe eigentlich kein Problem, solche INI-Dateien zu nutzen.
Habe eine eigene INI-Komponente, die alle möglichen INI-Formate einlesen kann und intern als UTF8-Speichert bzw. verarbeitet. Die Controls brauchen ja durch WinApiUnicode z.B. UTF8-Strings.

Ich nutze z.B. die INIs für meine Übersetzungsdateien. Und für den asiatischen Raum kommt man ohne Unicode nicht weit :-D

der Mischka

somby 28. Jun 2016 03:31

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mal noch eine kleine Ergänzung
in oWinApiUnicode.pas hinzugefügt.
TListView-Spaltenüberschriften im
ViewStyle=vsReport

somby

somby 29. Jun 2016 07:21

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bin es schon wieder.
- oWinApiUnicode.pas unterstützt jetzt auch MDI-Fenster
- Korrektur SetClipBoardData

Gruß
somby

querter 1. Jul 2016 18:31

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Hallo derMischka und somby;

Die Überarbeitung ist super ... zwischen der Version 2013 zur heutigen sind nun alle Speicherleaks behoben worden! :thumb:

auch Getmem ist aus den Funktionen entfernt worden (mir fehlte da der Gegenpart "FreeMem" in den Functionen ... )
und Cardinal vs. loses Integer-typ ist behoben ...
und TabControl schießt nicht mehr ab ...
etc.pp ...

Das Teil sieht mit der jetzigen Version nach einer schönen runde Sache aus.

Eine Frage habe ich noch ... die var TDynWSbuf in den Funktionen ... ist es noch sinnige diese zu inizialisieren und finalisieren?

also am Anfang der jeweiligen Function ein
Initialize(wsBuf);
SetLength(wsBuf, 0);

und am Ende der Funktion

SetLength(wsBuf, 0);
Finalize(wsBuf);


Sample:
Delphi-Quellcode:
function Utf8toWideString(const aString:string):WideString;
var wsbuf : TDynWSbuf;
    ii   : integer;
begin
  Initialize(wsBuf);
  SetLength(wsBuf, 0);

  if aString = '' then
  begin
    Result := '';
    exit;
  end;
  ii := ConvertToWideChar(@aString[1],length(aString),wsbuf);
  SetLength(Result,ii);
  if ii = 0 then exit;
  move(wsbuf[0],Result[1],ii * 2);

  SetLength(wsBuf, 0);
  Finalize(wsBuf);
end;

Danke für eure Arbeit!

Herzliche Grüße

Luckie 1. Jul 2016 20:39

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Mal eine Frage. Ich habe noch das BDS2006. Könnte ich es mit der Unit auch Unicode fähig machen?

querter 4. Jul 2016 19:16

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Hallo somby

in TRichEdit funktioniert FindText() nicht mehr ... gibt immer -1 zurück ...

TCustomRichEdit.FindText arbeitet intern mit PChar und TFindTextA ... wie bekomme ich das so umgebogen ... dass FindText mit PWideChar und TFindTextW arbeiten?!?

ich mach's jetzt erst einmal so ... aber schön ist es nicht ...
Delphi-Quellcode:
FindText(WideStringToUtf8(sW), FoundAt, ToEnd, []);
Hast Du eine Idee ...
... als es wieder zu deaktivieren?! :wink:

somby 5. Jul 2016 07:26

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Hallo Delphi-Fans,
bitte entschuldigt, aber es funktioniert noch einiges nicht
an RichEdit, z.B. FindText. Bin feste am wirken.
Das Problem ist z.B. das das RichEdit-Control 2.0 anstelle
eines CrLf nur noch ein Cr verwendet. So muß bei der Konvertierung
von Widestring->Utf8 und umgekehrt das berücksichtigt werden.
Melde mich wieder, wenn ichs habe.
Gruß
somby

somby 7. Jul 2016 09:29

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So es ist wieder mal soweit.
Einige Fehler wurden in oWinApiUnicode.pas
bzgl. TRichEdit-Control noch behoben.
So funktioniert jetzt:
..lines.Add, ..lines.Insert, ..FindText
Falls ihr noch einige Fehler entdeckt, bzw. Ergänzungen habt,
bitte melden.
Gruß somby

somby 7. Jul 2016 14:26

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Hallo querter,
da jetzt FindText() im RichEdit funktionert,
mußt du einfach den Suchtext als Utf8-Text eingeben,
du bekommst dann die Position im gesamten Utf8-Text geliefert
(beginnend ab 0).
Gruß somby

somby 12. Jul 2016 15:05

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Meine vorerst letzte Version,
bitte melden, wenn Ihr fehler entdeckt.
Gruß somby

derMischka 15. Aug 2016 16:09

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Somby,

habe mal meine aktuelle Version mit deiner gemerged.
Ich hoffe, dabei keine Fehler gemacht zu haben.

Als wesentliche Neuerung habe ich CLASS_UNICODE_EXT eingeführt (damit es mit vorher Registrierten Classes keine Probleme gibt).
Des Weiteren sammle ich alle registrierten W-Classes in eine StringList gesammelt.
Beim Finalisieren werden diese explizit unregistered (Hat bei mir DLL-Probleme gelöst).

der Mischka

somby 17. Aug 2016 09:23

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo "derMischka",
schön, dass du wieder mal an der Unit oWinApiUnicode.pas
gearbeitet hast. Zu deiner Version habe ich auch noch
einiges ergänzt:

- TextOut
- PeekMessage
- GetTextExtentExPoint

Beim testen mit einer kyrillischen Bildschirmtastatur
fiel mir auf, dass keine WideChar-Tastencodes ankamen.
Das lag daran, dass Delphi7 in der Klasse TWinControl der
Unit Controls in der Botschaft WM_CHAR die protected Funktion
DoKeyPress aufruft, die wiederum KeyPress aufruft und hier das
WideChar auf Char beschneidet.
Um das zu umgehen, wurde in der Klasse TWinControl die Botschaft
WM_CHAR durch eine Hilfsklasse TChWinControl neu belegt.
Bei der Verwendung von OnKeypress kann, obwohl nur
ein Char übergeben wird, trotzdem das WideChar abgefragt werden:
z.B.:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var UniKey: WideChar absolute Key;
begin
....
end;

Ich nutze oWinApiUnicode schon seit einiger Zeit mit gutem
Erfolg.

Noch eine kleine Bemerkung betrifft meine vielleicht eigenartige
Blockstruktur im Quellcode (begin am ende usw.), z.B.:

if ... then begin
...
end;


Ich nutze diese
Struktur schon seit vielen Jahren mit gutem Erfolg, da diese Struktur im Gegensatz
zu
if ... then
begin
...
end;
eine sehr gute Blocklesbarkeit garantiert. Also bitte nicht ärgern wenn das
für dich und die anderen Nutzer etwas merkwürdig erscheint.

Viele Grüße
Somby

somby 17. Aug 2016 10:02

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo derMischka,
habe noch eine kleine Änderung,
konnte in der Klasse TWinControl die
protected Funktion DoKeyPress direkt überschreiben,
brauchte nicht die Botschaft WM_CHAR anzuzapfen.

Gruß
Somby

somby 17. Aug 2016 12:25

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Hallo "derMischka",
leider funktionieren nach deine Klassenumbenennung
meine MDI-Fenster nicht mehr, gehe wieder zurück auf
alte Version
Gruß
Somby

Memnarch 17. Aug 2016 14:38

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Kurze frage: wie wärs mit nem Github-Repo? Hier lässt sich weder der aktuellste stand noch die Änderungen vernünftig tracken.

querter 27. Feb 2017 17:34

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Hallo derMischka & Somby,

was und wie ist denn jetzt der letzte Stand?

Leider scheint sich das Projekt irgendwie "kaputt" eingeschlafen zu sein.

Schade.

Könnte ihr beide ggf. noch einmal gemeinsam "letzte" Anstrengungen an/in Zeit investieren - für ein Final-Version?! :oops:

Herzliche Grüße
querter

derMischka 15. Mär 2017 14:09

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

hier mein letzter Stand von oWinApiUniCode.pas

der Mischka

derMischka 12. Okt 2017 13:47

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

mal wieder eine aktuelle Version von oWinApiUniCode.pas

Nun können auch über die Tastatur eingebene Zeichen > high(Char) eingelesen werden.

Ansonsten sind noch ein paar Bugfixes mit eingeflossen.

Viel Spaß damit.

der Mischka

querter 19. Okt 2017 19:24

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Zitat:

Zitat von derMischka (Beitrag 1383180)
mal wieder eine aktuelle Version von oWinApiUniCode.pas

Hallo der Mischka,

DANKE! :thumb:

Peter666 7. Aug 2018 13:15

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Ich weiß das ist etwas Leichenfledderei, aber ich nutze die Unit für ein paar alte Projekte und ich hab ein Problem wenn bei TMenuItem die Eigenschaft RadioItem auf True ist und TGroupbox zeigt die Caption auch nicht korrekt an.

Peter

derMischka 16. Jul 2019 13:55

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
der Vollständigkeit halber mal ein Update:

Die Loggingfunktionen ggf. anpassen...

der Mischka

MPirnstill 22. Jul 2019 15:29

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Hallo,

da der Thread ja eh kürzlich erst wiederbelebt wurde, möchte ich auch gern noch etwas fragen, da mich dieses Thema gerade beschäftigt.

Also ich hab mir die Unit und das Testprojekt runtergeladen und auch wunderbar (nach ein paar Auskommentierungen) zum Laufen (Delphi 7) gebracht.

Wenn ich das richtig deute, ist das ein Zeichensatz mit kyrillischen Zeichen (Panelname ist ja auch pnlKyri).

Jetzt konnte ich leider im Programmcode nicht ausfindig machen, was dafür verantwortlich ist, das ein kyrillischer Zeichensatz
und nicht ein z.b. arabischer Zeichensatz geladen wird. Wie kann ich das steuern? Oder brauche ich das nicht?
Funktioniert das mit z.B. der TDBEdit-Komponente auch?


Vielen Dank im Voraus für eure Antworten.


Viele Grüße
Micha

derMischka 29. Jul 2019 09:16

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
benutze einfach andere Zeichen aus den Unicode-Satz.
Kyrillisch kommt von meinen ersten Projekt, wo ich es gebraucht habe.

z.B. UniCode-Zeichen $4F60 --> UTF8 = $E4 $BD $A0

ss := #$E4#$BD#$A0;

und das mal an ein Caption übergeben.

sollte ein chinesisches Zeichen ergeben: 你

ich habe nur die Standard Controls "umgebogen". Zur TDBEdit-Komponente kann ich jetzt nichts sagen (hab grad kein Delphi vor mir).

der Mischka

querter 22. Okt 2019 15:16

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Zitat:

Zitat von dermischka (Beitrag 1436855)
der vollständigkeit halber mal ein update

超! 谢谢啦

:-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz