vložil Radek Červinka
8. září 2010 22:53
Osobně si myslím, že programovat se člověk naučí jen psaním programů a rýpáním se v cizích kódech (no a ještě čtením delphi.cz). Rád se dívám, jak to dělají jiní a nechávám se inspirovat. A sem tam narazím na kousek kódu, který mne zaujme. A tak ho sem hodím v novém občasníku (tag utrzky).
Velmi dobrým zdrojem je VCL a našinec tak kolikrát najde velmi zajímavé konstrukce. Jako ta dnešní, která je velmi často používaná i jinde.
Tento typ konstrukcí je ve VCL použit velmi často, ale zrovna tato část je moc pěkná, zvláště konstrukce u Alignments by mne nikdy nenapadla (dvoudimenzionální inicializované pole).
procedure TCustomEdit.CreateParams(var Params: TCreateParams);
const
Alignments: array[Boolean, TAlignment] of DWORD =
((ES_LEFT, ES_RIGHT, ES_CENTER),(ES_RIGHT, ES_LEFT, ES_CENTER));
Passwords: array[Boolean] of DWORD = (0, ES_PASSWORD);
ReadOnlys: array[Boolean] of DWORD = (0, ES_READONLY);
CharCases: array[TEditCharCase] of DWORD = (0, ES_UPPERCASE, ES_LOWERCASE);
HideSelections: array[Boolean] of DWORD = (ES_NOHIDESEL, 0);
OEMConverts: array[Boolean] of DWORD = (0, ES_OEMCONVERT);
NumbersOnlyStyle: array[Boolean] of DWORD = (0, ES_NUMBER);
begin
inherited CreateParams(Params);
CreateSubClass(Params, 'EDIT');
with Params do
begin
Style := Style or (ES_AUTOHSCROLL or ES_AUTOVSCROLL) or
Alignments[UseRightToLeftAlignment, FAlignment] or
BorderStyles[FBorderStyle] or Passwords[FPasswordChar <> #0] or
NumbersOnlyStyle[FNumbersOnly] or
ReadOnlys[FReadOnly] or CharCases[FCharCase] or
HideSelections[FHideSelection] or OEMConverts[FOEMConvert];
if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then
begin
Style := Style and not WS_BORDER;
ExStyle := ExStyle or WS_EX_CLIENTEDGE;
end;
end;
end;
Jen pro jistotu: máme několik konstant typu pole s inicializovanou hodnotou, kde dimenzi pole určuje některý typ (hodně často Boolean, což je ve skutečnosti interval 0..1). Pak už jen jednoduše přistoupíme do pole a použijeme výslednou hodnotu ve výrazu. Je to krátké, podle mne přehledné a velmi efektivní i z hlediska výkonu, kdy program nemá žádné skoky, tj. procesor nemusí řešit větvení v predikování provádění. Zkrátka samé pozitiva a sociální jistoty.