Delphi VCL / RTL

Tipps f├╝r die Delphi VCL und die Delphi Runtime Library

Die Namen aller CharacterSets f├╝r einen Zeichensatz auflisten

Normale Zeichens├Ątze, also Zeichens├Ątze bei denen kein Unicode benutzt wird, werden in Windows mit 8 Bit kodiert. Das bedeutet, dass mit einem solchen Zeichensatz nur 256 verschiedene Zeichen gleichzeitig dargestellt werden k├Ânnen. Das f├╝hrt dann zu Problemen wenn nationale Sonderzeichen dargestellt werden sollen (z.B. das deutsche “├ľ” oder das grosse “I” mit Punkt im t├╝rkischen Zeichensatz)
Um nationale Sonderzeichen zu unterst├╝tzen, sind die meisten Zeichens├Ątze in unterschiedliche Kodierungen verf├╝gbar. Diese werden ├╝ber das so genannte “Characterset” definiert. So wird mit dem CharaterSet “Westlich” der Zeichensatz auf die Anzeige von z.B. deutschen Umlauten umgeschaltet.
Mit der folgenden Delphi Unit k├Ânnen alle von einem Zeichensatz unterst├╝tzten CharacterSets aufgelistet werden. Enthlaten ist auch ein Demoprogramm, das zeigt, wie die Unit und die darin enthaltene Klasse “TCharSetEnumerator” zu verwenden ist.

Download der der Unit (mit Demoprogramm, als ZIP-Archiv)

 

Controls ├╝ber ihren Namen einschalten / ausschalten

Will man die Eigenschaften eines Controls ver├Ąndern so geht das normalerweise nur wenn man eine Referenz auf dieses Control hat. Ist nur der Name des Controls bekannt, so muss man das Control erst im aktuellen Formular suchen um die Referenz darauf zu erhalten. Diese Suche kann mit der Methode “FindControl()” erledigt werden.

1 procedure TForm1.DoEnableControl(aName: string; isEnabled: Boolean);
2 var
3   AComponent                            : TComponent;
4 begin
5   AComponent := FindComponent(aName);
6   if Assigned(AComponent) then
7     if AComponent is TControl then
8       TControl(AComponent).Enabled := isEnabled
9 end;
 

Hinweis: wenn sich das Control in einem Container, also beispielsweise einem Panel, befindet dann muss man mit FindControl in diesem Panel suchen! Soll das Control im gesamten Formular, inklusive aller Containercontrols gefunden werden so muss die Suchroutine rekursiv aufgerufen werden.

Akustisches Signal in Edit-Controls vermeiden

Wenn in einem Edit-Control die Enter Taste gedr├╝ckt wird, so wird normalerweise ein kurzes akustisches Signal ausgegeben (Beep). Das kann, besonders bei Eingabemasken mit vielen Edit-Controls l├Ąstig werden. Mit dem folgenden Code kann die Ausgabe dieses akustischen Signals verhindert werden:

  1 // Unterdr├╝cke den Beep - Ton entweder im OnKeyPress Ereignis:
 2 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
 3 begin
 4   if Key = #13 then begin               {// #13 = Return}
 5     Key := #0;
 6     // Code...
 7   end;
 8 end;
 9
10 // Oder im OnKeyDown Ereignis:
11 procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: word;
12   Shift: TShiftState);
13 var
14   Mgs                                   : TMsg;
15 begin
16   if Key = VK_RETURN then
17     PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
18 end;
19
 

 

 

aktualisiert: 11.11.2009