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).
1procedure TCustomEdit.CreateParams(var Params: TCreateParams);
2const
3 Alignments: array[Boolean, TAlignment] of DWORD =
4 ((ES_LEFT, ES_RIGHT, ES_CENTER),(ES_RIGHT, ES_LEFT, ES_CENTER));
5 Passwords: array[Boolean] of DWORD = (0, ES_PASSWORD);
6 ReadOnlys: array[Boolean] of DWORD = (0, ES_READONLY);
7 CharCases: array[TEditCharCase] of DWORD = (0, ES_UPPERCASE, ES_LOWERCASE);
8 HideSelections: array[Boolean] of DWORD = (ES_NOHIDESEL, 0);
9 OEMConverts: array[Boolean] of DWORD = (0, ES_OEMCONVERT);
10 NumbersOnlyStyle: array[Boolean] of DWORD = (0, ES_NUMBER);
11begin
12 inherited CreateParams(Params);
13 CreateSubClass(Params, 'EDIT');
14 with Params do
15 begin
16 Style := Style or (ES_AUTOHSCROLL or ES_AUTOVSCROLL) or
17 Alignments[UseRightToLeftAlignment, FAlignment] or
18 BorderStyles[FBorderStyle] or Passwords[FPasswordChar <> #0] or
19 NumbersOnlyStyle[FNumbersOnly] or
20 ReadOnlys[FReadOnly] or CharCases[FCharCase] or
21 HideSelections[FHideSelection] or OEMConverts[FOEMConvert];
22 if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then
23 begin
24 Style := Style and not WS_BORDER;
25 ExStyle := ExStyle or WS_EX_CLIENTEDGE;
26 end;
27 end;
28end;
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.