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.