Náhodné výkřiky 48

vložil Radek Červinka 9. března 2015 22:29

Dneska to budou spíše takové triky.

Zmenšení velikosti zálohy instalačních souborů

Instalátor Delphi je napsán v Install Aware, který bohužel ještě z různých důvodů (asi politických) spolupracuje s Microsoftim MSI. Nejen, že MSI je totální neefektivní (např. při reinstalaci otevírá prý každý soubor 4x - proto taky Delphi dělají unistall a nový install), ale ještě se ukládají informace pro reinstalaci do c:\ProgramData (to jde nějak změnit parametrem).

Komprese 1

Problémem je, že v době SSD disků a VMWare jsou disky C malé a takové XE7 tak napráská 10GB dat, které se už moc nepoužijí. Bohužel do doby než se vykopne MSI s tím moc neuděláme.

Samozřejmě nejjednodušší je tyto data smazat, ale to není ideální. Naštěstí Windows umožňují jednoduše některé adresáře komprimovat a v tomto případě je to momentálně nejlepší řešení.

Komprese 2

Kompresí jsem to stáhl na polovinu - viz. první screenshot.

Doplnění metody dle interface

Přiznám se, že jsem dlouho toto hledal, přitom to Delphi umějí prý věky.

Mějme

type
  ITest = interface
    procedure TestA;
    procedure TestB;
  end;

  TTest = class(ITest)

  public

  end;

Vždycky jsem jak idiot kopíroval metody dle interface, což v případě nějakých externích rozhraní je pracné. Přitom se stačí postavit mezi public a end a stisknout CTRL + Space.

Interface

Dvakrát trik při obsluze klávesnice

a) jak jednoduše otestovat, že není stisknut např. ALT ani CTRL v onKeyxxx:

 if (Shift * [ssCtrl, ssAlt] = []) then

V tomto případě se provádí průnik množin s testem na prázdnou množinu.

b) Jak v OnKeyPress otestovat, zda je klávesa stisknuta s CTRL?

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ^A then
  begin
    (Sender as TMemo).SelectAll;
    Key := #0;
  end;
end;

V tomto případě (který by se dal napsat i jinak) jsem schválně využil ^, což je málo dokumentovaný operátor (funguje to od dob TP, včetně FPC), kdy např. ^A znamená ASCII kód CTRL+A.

No a uvedený příklad přidává podporu CTRL+A pro Memo (výchozí windows memo CTRL+A nepodporuje).

Oba příklady používají konstrukce, které se dají použít samozřejmě i jinde.

Jak zakázat IDE balíčky

To jsem taky nevěděl (tu druhou část). Pokud otevřete v registru

[HKEY_CURRENT_USER\Software\Embarcadero\BDS\15.0\Known IDE Packages]

je tam seznam IDE rozšíření. Pokud u libovolného změníte data sekci tak, že bude začínat jedním nebo dvěma _ (např. na "__Start Page IDE Package"), zakážete inkriminovaný balíček.

Jedno podržítko = zakázáno uživatelem, dvě = zakázáno systémem.

Platnost od doby cca D2006.

Snad Vám něco z toho bude k užitku.

Tagy: ,

Praxe

Komentáře

12.3.2015 9:53:47 #

Ondřej Pokorný

Bezva triky, díky za ně!

+ O tom adresáři jsem si myslel, že se po instalaci smaže (přišel jsem na to tak, že i při ~20 GB volného místa na disku se Delphi prostě nenainstalovaly...). To je bordel teda :) Takhle mi zaplácávat C...

Každopádně, já jsem ho smazal a taky se nic nestalo.

Ondřej Pokorný

16.3.2015 11:26:59 #

bohdan

Já jsem vymazal všechny adresáře ve složených závorkách a taky se nic nestalo. Mám nyní od 10 Gb navíc.Pro jistotu jsem si to schoval, ale žádný problém se nevyskytl.

bohdan

16.3.2015 11:44:36 #

radekc

Není problém, dokud nebudeš chtít obnovit, změnit konfiguraci nebo jinou operaci s instalátorem.

radekc

16.3.2015 11:52:22 #

Tonda

Je docela smutny videt jak si tahle firma nedokaze vytvorit vlastni funkcni instalator a misto toho roky pouziva ten MS paskvil :(
Ale neni se cemu divit, kdyz jim X let trva zavedeni i jinych veci.

Tonda

16.3.2015 12:02:45 #

radekc

Jak jsem říkal, oni mají vlastní instalátor na bázi InstallAware, ale z nějakých politických (nyní už možná neplatných) důvodů musel volat ten MSI, byl to tehdy kdysi pozadavek MS kvuli nejakým certifikacím (pokud se nepletu).

On ten instalátor je celkem složitá věc a taková změna není sranda. Ale souhlasím ze MSI je paskvil.

radekc

14.4.2015 1:11:55 #

Igor

Tak jsem také kouknul do ProgramData (mám 1TB SSD disk) a kupodivu u mě byl adresář prázdný, aniž bych ho mazal... to jsem z toho jelen. Už jsem se těšil, jak také ušetřím, ano houbelec :-)

S tím interface ... netušíš Radku, jestli XE8 už nabízí nějakou nativní podporu pro automatické reference counting a garbage collection ve VCL, třebas volitelně pro nové projekty? Já to u složitých výpočtů, kde se analyzují desítky různých tříd dohromady a je potřeba je najednou uchovávat v mnoha seznamech a pak včas uvolnit, docela používám, ale pořád musím jet přes interface a TInterfacedObject ... což je vlastně neustálé duplikování definic tříd do interface pořád dokola. Přitom by stačilo nějaké klíčové slovo, které by kompilátoru řeklo, že u dané třídy chci hlídat reference (no a samozřejmě ještě taková maličkost jako přepsat kompilátory) :-)))

Igor

14.4.2015 1:51:25 #

radekc

Igore, ohledně ProgramData - nemáš náhodou zapnuté schovávání skrytých souborů? Prostě to tam někde být musí, i když XE8 to po sobě už maže.

Ohledně ARC ve VCL, bohužel ne.

radekc

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ů