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
Jak mohu ve Visual Basicu zjistit písmeno jednotky CD-ROM a zapsat ho např. do labelu?
Písmeno zjistíte tak, že projdete všechny objekty Drive v kolekci Drives objektu
FileSystemObject . Které mají typ (DriveType ) 4, jsou CD.
Dim fso As Object, drv As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each drv In fso.Drives
If drv.DriveType = 4 Then
Label1.Caption = Label1.Caption & drv.DriveLetter
End If
Next drv
Ve Visual Basicu 6.0 mám tento kód:
rtbText.RightMargin = 120 * 1024 'toto hlásí overflow...
rtbText.RightMargin = 122880 '...ale toto ne
Zajímalo by mě, proč tomu tak je. Vždyť přece 120*1024 = 122880, tak proč to
při použití násobení hlásí chybu přetečení a při použití kostanty nikoliv?
Chyba není v RichTextBoxu, ale v implicitní konverzi datových typů (zkuste dát třeba při
přerušeném programu v okně Immediate vytisknout ten samý výraz: ? 120 * 1024, nastane stejná chyba).
Číslo 120 i 1024 je automaticky bráno jako Integer (předpokládám že to jsou pouze konstanty, ne proměnné, u
těch by měl být typ samozřejmě explicitně určen). Tzn. jejich výsledek je také brán jako Integer,
jenže Integer má max. 32767, z toho plyne ta chyba. Zkuste dát např. CLng(120) * 1024. V tomto
případě už bude vše v pořádku, protože první číslo je Long, druhé Integer, výsledek je "větší", tzn. Long.
Jak změním ikonu v oblasti system tray? Po spuštění formuláře se načte ikona ico1 a já
ji při pěhu programu potřebuji změnit. Také by mi pomohlo, kdyby byla ikona v system tray stejná jako ikona formuláře
a mě stačilo jen změnit ikonu formuláře. Jde to?
Změnit ikonu není problém, stačí vykonat stejnou proceduru jako při jejím umístění do system tray,
pouze při volání API funkce Shell_NotifyIcon zadáte konstantu NIM_MODIFY
místo NIM_ADD . Předtím je samozřejmě potřeba změnit ikonu u formuláře, pokud ji berete
z vlastnosti Icon . Můžete si změnu umístit do procedury a volat ji vždy při
změně ikony formuláře.
Jak mohu zjistit poslední den v měsíci? Neboli potřebuji vědět, kolik dní má měsíc v daném roce.
Nejdříve přidejte k zadanému datu jeden měsíc.
DateAdd("M",1, datDate)
Potom z tohoto data vytvořte nové a to tak, že použijete rok a měsíc, den dejte 1.
datNew = DateSerial(DatePart("Y", datDate), DatePart("M", datDate), 1) .
Od tohoto data odečtěte 1, tj jeden. den a máte datum, které je posledním dnem daného měsíce.
MsgBox DatePart("D", datNew -1) .
Potřebuji programu nastavit vlastnost, aby se neukazoval v seznamu běžících programů, tj. po stisku Ctrl+Alt+Delete.
Program můžete schovat pomocí API funkce RegisterServiceProcess .
Private Declare Function RegisterServiceProcess Lib "kernel32" _
(ByVal dwProcessID As Long, ByVal dwType As Long) As Long
Dim i1 As Long
i1 = GetCurrentProcessId()
'schová
RegisterServiceProcess i1, 1
'ukáže
RegisterServiceProcess i1, 0
Jak můžu zjistit číslo prvního zobrazeného řádku v prvku RichTextBox? U FlexGridu
je k tomu vlastnost TopRow , u RichTextBoxu ale nic podobného není.
Číslo prvního viditelného řádku zjistíte pomocí funkce SendMessage (první
řádek je 0, druhý 1 atd.)
MsgBox "První řádek: " & SendMessage(rtf1.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
Otázky bez odpovědi
Potřebuji ve svém programu použít průhledný textbox nebo textbox, ve kterém by byl na pozadí mnou vybraný obrázek.
Na Internetu jsem našel tři různé návody, ale ani jeden neposkytuje takové funkce jako původní textbox
(ScrollBar, DataField atd.).
Potřebuji použít funkci Inkey , ale Visual Basic ji nemá. Neznáte způsob, jak ji nahradit?
Nevíte jak zjistit, které klávesy byly stisknuty, když je můj program na pozadí?
Nějak to jít musí, využívají toho např. programy CS-VOICE a BlackBox.
Jak je možné změnit IP adresu a masku podsítě pomocí Visual Basicu 5.0 nebo 6.0 na Windows 2000? A je možné
vrátit nastavení zpět na získání IP z DHCP serveru?
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.
|