Otázky a odpovědi

V této rubrice najdete odpovědi na své otázky, které můžete zasílat na adresu vbtipy@seznam.cz. Pokud nebudeme znát odpověď na nějakou otázku, objeví se v části Otázky bez odpovědi a budete-li znát odpověď vy, můžete nám ji pomocí výše uvedené adresy zaslat, rádi ji zveřejníme.

Otázky a odpovědi

Otázky bez odpovědi

Otázky a odpovědi

  Nevíte, jak vytvořit nápovědu k menu tak, že když najedu na nějakou položku, např. ve StatusBaru se mi objeví její popis? Stejně to funguje např. v Office.

Protože odpověď pro tuto otázku je poněkud obsáhlejší, vypomůžeme si opět příkladem. V podstatě jde o to, zachytit zprávu WM_SELECT pomocí API funkce SetWindowsLong, vyhledat, které menu je právě vybráno a zobrazit zprávu.


  Potřebuji v ListView zvýraznit některé položky tučně. Stejně jako je to např. v aplikaci Outlook Express, když je některá pošta nepřečtená.

Položka, tedy řádek, v ListView je charakterizována objektem ListItem kolekce ListItems. Pokud je potřeba mít některou tučně, stačí nastavit její vlastnost Bold = True. Např. takto:

Dim lstPol As ListItem
Set lstPol = ListView1.Add(Text:="Prvni") 'nova polozka v ListView
lstPol.Bold = True


  Už nějakou dobu se snažím poslat v programu vytvořeném ve VB 5.0 informace k vytisknutí na jinou než výchozí tiskárnu. Vždy se mi podaří nastavení změnit jen na chvíli a to do doby, než změním font tisku nebo odešlu něco na tisk. Potom se hned nastaví opět výchozí tiskárna. Např.:

MsgBox(printer.devicename) 'Nastavená výchozí tiskárna 2
Set Printer = Printers(3) 'Nastavení tisku na tiskárnu 3
MsgBox(printer.devicename) 'Nastavená tiskárna 3
Printer.Print "Text" 'Tento text se už tiskne na výchozí tiskárnu 2
MsgBox(printer.devicename) 'A zde je nastavená výchozí tiskárna 2

Tento příklad jsem zkoušel na svém počítači a fungovalo to bez problémů. Buď je chyba někde ve zbytku kódu nebo zkuste místo použití objektu Printer deklarovat proměnnou typu Printer a tu potom používat.


  Jak při instalaci (či jinak elegantně) zařídit, aby se program spouštěl automaticky po startu počítače? Je určen pro SysTray oblast.

Jak pozměnit standardní instalační program dodávaný s VB najdete v dnešních zdrojových kódech. Nejlépe je vložit spuštění programu po startu do složky Po spuštění v nabídce Start nebo přímo v registru do položky HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Run. Zda se spouští normálně nebo v SysTray oblasti záleží už na samotném programu.


  Nedokážu najít způsob, jak přečíst v programu ve Visual Basicu parametry příkazové řádky.

Parametry příkazové řádky vrací ve VB funkce Command. Návratová hodnota je typu String, tzn. co uživatel zadal za názvem programu si už musíte "vypreparovat" sám.


  Lze ve VB pracovat s grafikou ve více vrstvách? Vykreslím-li nějaký tvar pomocí Circle, PSet, Line a chci část skrýt (vypnout hladinu), musím vše vymazat (cls) a poté znovu vykreslit viditelné. Zkoušel jsem nastavit DrawMode = 7 a znovu vykreslit hladinu k vypnutí, ale nefunguje to (patrně kvůli AutoRedraw = True). Jsou i jiné metody, popř. udělal jsem někde chybu?

S hladinami VB pracovat neumí. Pokud chcete schovat nějakou kresbu, musíte ji znovu vykreslit. Přitom je nutno mít nastaven režim XOR, tedy DrawMode = vbXorPen (nebo 7). To, že Vám to nefunguje, určitě není nastavením AutoRedraw = True. Při režimu XOR je nutno si uvědomit, jak se vykresluje. Při kreslení je provedena operace XOR s jednotlivými bity barvy pera a barvy pozadí na stejných pozicích. Výsledná barva je použita pro vykreslení (např. "barva pera" XOR "barva pozadí" = "barva vykresleni" - 1111 XOR 0011 = 1100). A navíc, bavíme-li se o barvě pozadí, nejde o pozadí formuláře, ale o barvu na formuláři v místě, kde budete vykreslovat. Například:

Form1.DrawMode = vbXorPen
Form1.BackColor = RGB(0, 0, 0) 'Barva pozadi - cerna
Form1.ForeColor = RGB(255, 0, 0) 'Barva pera - cervena
Form1.Circle (500, 500), 200 'Nakresli kruznici
Form1.Circle (500, 500), 200 'Zrus kruznici

Pro první kružnici je výsledek brán z RGB(0,0,0) XOR RGB(255,0,0) = RGB(255,0,0). Při druhém vykreslení je však již barva pozadí v místě kružnice červená, tj. RGB(255,0,0) a výsledkem RGB(255,0,0) XOR RGB(255,0,0) je RGB(0,0,0), tedy barva pozadí formuláře, tzn. kružnice zmizí.


Otázky bez odpovědi

  V MSDN je zmienka o použití interfacu k objektom Windows Exploreru na vloženie objektov (Listview, treeview, combo, taskbar atď ) do vlastných aplikácií, ale priložené vzory sú pre C++. Chcem Vás požiadať o nejaké moduly alebo príklady pre použitie týchto objektov, za čo Vám budem veľmi vďačný ! Zaujíma ma hlavne zobrazenie Listview, treeview, combo z exploreru a objekty z taskbaru (tabsysview, systraj objekt, objekt hodín a ponuky Štart pre vytvorenie nového typu taskbaru). Veľmi Vás prosím o pomoc.


  Rád by som získal informácie o API funkciách pre prácu s resources, spôsob ich volania vo VB a informácie potrebné pre správny chod funkcie: loadresource, findresorce, freeresource, updateresource. Chcel by som urobiť malý lokalizátor, a na to sú potrebné tieto funkcie, v angličtine (MSDN) som čosi porozumel, ale neviem ako loadnuté resource zobraziť v Image, txt objekte, a ako ich updatovať do súboru.


  Zkoušel jsem přidat bitmapu do menu pomocí API funkce SetMenuItemBitmaps. V normálním menu to funguje. Jakmile však stejný postup použiji v PopupMenu, obrázek se nezobrazí.