Tipy a triky v Delphi, díl 45.

Diskuze čtenářů k článku

Pavel Kriz  |  19. 06. 2002 09:07

Ve funkci GetCDInfo mne zaujalo toto:
(IntToHex(SerialNum shr 16, 3) + IntToHex((SerialNum shl 16) shr 16, 4))

Nevím, k čemu jsou ty závorky, ale když už, tak bych rozhodně místo (SerialNum shl 16) shr 16
použil normální SerialNum and $FFFF

ale ještě raději bych to celé udělal docela obyčejným:
Format('%x', [SerialNum])

a úplně celé by to mohlo vypadat:

Result := Format('%x - %s', [SerialNum, VolumeName]);

 

Kromě toho bych rozhodně doporučoval doplnit do hlavičky funkce "const":

function GetCDInfo(const WhichDrive: string): string;

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petr  |  19. 06. 2002 10:44

Jak už zde bývá tradičně zvykem, i v takto jednoduché funkci lze najít plno nedostatků, takže shrnuto:

1. Parametr WhichDrive by měl být předáván jako const

2. Parametry určující velikost bufferu předávaného do dané API funkce je zcela nevhodné předávat jako hodnoty "256", protože při změně velikosti bufferu se tato hodnota automaticky nezmění. Správnější je použít SizeOf()

3. Konstrukce (X shl 16) shr 16 je opravdu úžasná, bohužel to asi není ten správný způsob jakým by se měli lidé učit programovat.

4. Funkce by měla vždy vracet nějakou definovanou hodnotu, takže zde chybí: else Result :="";

5. Výsledný řetězec by bylo vhodné formátovat funkcí Format a ne tak hrozným způsobem, jako je v článku.

Výsledná známka: 4-

Souhlasím  |  Nesouhlasím  |  Odpovědět
Radek Chalupa  |  19. 06. 2002 06:56

Zpráva WM_SETREDRAW se opravdu nepoužívá na hlavní okno (nebo jiný klasický "formulář"), ale používá se při naplnění list-boxu velkým počtem položek najednou. Před plněním se zakáže překresleni a teprve po naplnění celého list-boxu se tento zase nechá překreslovat. Čím více položek, tím větší je časový zisk, který se ušetří opakovaným překreslováním po přidání každé jednotlivé položky.

Radek Chalupa www.rcsoft.cz, www.windev.cz

 

 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor