Útržky kódu 1

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.


Nabízíme Delphi školení a konzultace na různá témata, primárně ve Vaší firmě.

Tagy: ,

Praxe

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS