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, Trik, Díl, Druhý řád


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

Řidiče Tesly ukolébal autopilot, policisté ho zastavili až po 11 kilometrech

Řidiče Tesly ukolébal autopilot, policisté ho zastavili až po 11 kilometrech

** Policisty poblíž San Franciska zaujala Tesla se spícím řidičem ** Donutili vozidlo zpomalit a následně probudili překvapeného řidiče ** Vozidlo podle dostupných informací jelo v režimu autopilota

Karel Kilián | 69

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

Photolemur 3: Prostě do něj přetáhnete fotky a začne se dít magie. Tedy údajně...

** Je lepší nabušený Photoshop, nebo program s jedním tlačítkem? ** Photolemur si myslí to druhé ** Tento fotoeditor neumí skoro nic, a přitom (skoro) všechno

Jakub Čížek | 21

E-mail zdarma - není čas změnit vaši starou adresu?

E-mail zdarma - není čas změnit vaši starou adresu?

** E-mail většina z nás za svůj život příliš nemění. ** Služby se ale vyvíjí a některé mají zajímavé funkce. ** Velkým lákadlem může být integrace do ekosystému dalších služeb.

Vladislav Kluska | 64

Vybíráme nejlepší monitory: Od úplně levných po velké prohnuté obludy

Vybíráme nejlepší monitory: Od úplně levných po velké prohnuté obludy

** Vybrali jsme nejlepší monitory na práci, hraní i filmy ** Nejlevnější monitor s kvalitním panelem stojí tři tisíce ** 4K už dává smysl i s cenou kolem deseti tisíc korun

David Polesný | 54



Aktuální číslo časopisu Computer

Nejlepší programy pro úpravu fotek zdarma

Externí disky pro zálohu dat

Velký test: herní notebooky

Srovnání 12 batohů