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