Ú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).

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.

Tagy: ,

Praxe

Komentování ukončeno

Naše nabídka

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).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

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.

Poslední komentáře

Comment RSS

Dle měsíců