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

  Které soubory si mám nahrát na svůj počítač, abych nemusel při hledání informací nebo studiu Visual Basicu neustále číst z CD.

Pokud chcete celou rubriku VB, tak celý adresář VBasic z adresáře Zkuste. Chcete-li pouze seriál nebo jinou část, vždy pouze odpovídající HTML soubor z adresáře Zkuste\VBasic (v případě seriálu je to serial.htm atp.) a dva související podadresáře, např pro seriál je to Data\Serial a CCD\Serial, pro activex to je Data\ActiveX a CCD\ActiveX atd.


  Jak zjistím nejdelší položku v ListBoxu a na základě této délky nastavím horizontální posuvník?

Horizontální posuvník nastavíte zasláním zprávy LB_SETHORIZONTALEXTENT příslušnému ListBoxu s délkou v pixelech.

SendMessage List1.hwnd, LB_SETHORIZONTALEXTENT, lText/Screen.TwipsPerPixelX, 0&

Hodnota lText je nejdelší položka v ListBoxu zjištěná takto:

Dim i As Long, lText As Long, tmp As Long

lText = 0
For i = 0 To List1.ListCount - 1
  tmp = TextWidth(List1.List(i))
  If tmp > lText Then lText = tmp
Next i
lText = lText + TextWidth(" ")


  Potřebuji v databázi najít nějaký záznam, ale nevím jak. Zkoušel jsem tento kód (níže uvedený), ale bohužel nefunguje.

propmpt = "Zadej úplné jméno pro hledání"
searchStr = InputBox(prompt$, "hledaný řetězec")

Data1.Recordset.Index = "NázevFirmy"
Data1.Recordset.Seek "=", searchStr

Problém je v použití metody Seek. Funguje pouze pro sady záznamu (Recordsety) otevřené jako tabulka, tzn. buď dbOpenTable nebo při použití prvku Data, což je váš případ, nastavit vlastnost RecordsetType prvku Data na hodnotu 0 neboli Table. Pokud nechcete otevírat Recodset jako tabulku, musíte použít tento kód:

propmpt = "Zadej úplné jméno pro hledání"
searchStr = InputBox(prompt$, "hledaný řetězec")

Data1.Recordset.FindFirst "NázevFirmy='" & searchStr & "'"


  Nevíte jak udělat, aby při ukončení Windows můj program dal hlášení, že je v CD-Rom jednotce vloženo CD?.

Při ukončování Windows standardním způsobem, tj. pomocí nabídky Start - Vypnout, je všem aplikacím zaslána zpráva WM_QUERYENDSESSION. Tuto zprávu musíte odchytit a potom zjistit, zda je v mechanice vloženo CD třeba zjištěním volného místa pomocí vlastnosti FreeSpace objektu Drive (rozšíření Microsoft Scripting Runtime). Pokud není požadovaný disk přístupný (tj. CD v mechanice není), vyvolá chybu, kterou lze samozřejmě ošetřit např. takto:

On Error Resume Next

Set fso = CreateObject("Scripting.FileSystemObject")
i = fso.Drives(strDrive).FreeSpace
If Err.Number = 0 Then
  Debug.Print "CD je v mechanice"
End If

On Error GoTo 0


Otázky bez odpovědi

  Potřebuji vytvořit aplikaci, která by uměla říct jiným programům, aby se nezobrazovali v TaskBaru. Tzn. stejně jako když u své aplikace nastavím ShowInTaskBar na False.


  Jak se dá udělat kontrolní součet (CRC32) souboru?


  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í.


  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.


  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.