Tipy a triky v Delphi, díl 94.

Dnešní tip bude spíše pro začátečníky, ale možná pomůže i ostatním čtenářům. Naučíme se hromadně měnit vlastnosti komponent.
Již několikrát jsem dostal dopis s dotazem, jak například hromadně zapínat či vypínat Hinty u komponent. Nejen u všech najednou, ale třeba jen u tlačítek. A nebo jak nějaké komponenty naráz zneviditelnit a podobně. Všechno se to týká stejného problému, kterým je hromadná změna určitých vlastností komponent. A to si přesně dneska ukážeme.

Samotný postup je vlastně velmi jednoduchý, nejedná se o nic mimořádného, ale právě podobné drobnosti často začátečníky mohou trápit. Pro celou akci si vytvoříme proceduru, která bude mít jako parametry jednak typ komponenty, jejíž vlastnosti budeme měnit, dále jméno této vlastnosti a konečně její číselnou hodnotu. V samotném těle procedury pak najdeme cyklus, který postupně projde všechny komponenty z našeho formuláře a má-li pro danou komponentu změna požadovaného parametru smysl (tj. takový parametr vůbec pro komponentu existuje), provede ji.

Zde tedy následuje kompletní zdrojový kód. Ten tentokrát obsahuje i deklarace řady prvků, které nejsou vlastně nijak funkčně využity (konkrétně je to dvakrát Label a Edit a jednou Memo). Ty jsou v kódu umístěny pochopitelně pouze ze zkušebních důvodů jak bude příklad fungovat a můžete použít cokoliv podle vlastní potřeby.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TypInfo, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure SetProperties(ClassName, Prop: string; Value: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SetProperties(ClassName, Prop: string; Value: Integer);
var
  i: integer;
  PropInfo: PPropInfo;
  Component: TComponent;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    Component := Components[i];
    if (Component is TControl) and ((Component.ClassName = ClassName) or (ClassName = `AllComponents`)) then
    begin
      PropInfo := GetPropInfo(Component.ClassInfo, Prop);
      if Assigned(PropInfo) then SetOrdProp(Component, PropInfo, Integer(Value));
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetProperties(`AllComponents`, `ShowHint`, 0);
  SetProperties(`TEdit`, `visible`, 0);
  SetProperties(`TMemo`, `Enabled`, 0);
  SetProperties(`TLabel`, `Autosize`, 1);
end;

end.

Na konci zdrojáku můžete vidět i jednoduchý příklad použití jako událost stisku tlačítka. První řádek vypne zobrazování již v úvodu zmiňované bublinkové nápovědy pro všechny komponenty, druhý řádek zajistí zmizení (zneviditelnění) všech komponent Edit z formuláře, třetí řádek "disabluje" komponenty Memo a poslední řádek zapne vlastnost Autosize pro všechny komponenty Label.

Váš názor Další článek: Intel zlevnil mobilní procesory

Témata článku: Software, Windows, Programování, Label, Druhý řád, Díl, Trik


Určitě si přečtěte

ELONOVINKY: Druhá strana popularity – servisy Tesly jsou přeplněné a nestíhají

ELONOVINKY: Druhá strana popularity – servisy Tesly jsou přeplněné a nestíhají

** Automobilka Tesla neustále zvyšuje prodeje svých vozů ** S kvapně rostoucím počtem nových majitelů Tesel ale stoupá i počet zákazníků servisů ** Servisy Tesly nestíhají, firma proto řeší další akutní problém

Petr Melechin, Karel Dlabač | 72

Proč je pro obézní lidi tak těžké shodit nadbytečná kila?

Proč je pro obézní lidi tak těžké shodit nadbytečná kila?

** Obézním lidem selhávají mechanismy, jež je mají chránit před nadměrným příjmem potravy ** Mozek tlouštíků ignoruje hormon leptin varující před hromaděním tukové tkáně v těle ** Vědci nyní odhalili, jak to udělat, aby mozek otupený obezitou leptin opět vnímal

Jaroslav Petr | 46

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

** Concorde byl nejrychlejším dopravním letadlem ** Atlantik dokázal přeletět za cca 3 až 3,5 hodiny ** Před osmnácti lety tragická havárie provoz těchto letadel prakticky ukončila

David Polesný, Jiří Černý | 37

Užijte si poslední změny času: Už od března 2019 můžeme mít trvale letní čas

Užijte si poslední změny času: Už od března 2019 můžeme mít trvale letní čas

** Evropská komise přijala legislativní návrh na zrušení střídaní času ** Možná tak v březnu 2019 přesuneme ručičky hodinek naposledy ** Od toho okamžiku bude permanentně platit letní čas

Karel Kilián | 96


Aktuální číslo časopisu Computer

Megatest: 13 grafických karet

Srovnání 7 dokovacích stanic s USB-C

Jak na perfektní noční fotografie

Kvalitní zdroje informací pro sebevzdělávání