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 mßm vytvo°it formulß°, kter² bude po°ßd naho°e (jako Panel zßstupc∙ MS Office).

Objekt Form ve Visual Basicu nemß ₧ßdnou vlastnost, pomocφ kterΘ by to Ülo ud∞lat. Jedinß mo₧nost, jak si v tomto p°φpad∞ pomoci, je pou₧φt funkci API SetWindowPos.

SetWindowPos frm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE


  Vytvo°il jsem si na cd soubor autorun.inf a pomocφ prvku Picture, nebo Button bych cht∞l otev°φt HTML strßnku, kterß by byla na cd spolu se spouÜt∞cφm souborem. Nap°: f:\autorun.exe se souborem f:\index.htm. Tohle bych um∞l, ale hßΦek je v tom, ₧e v jinΘm poΦφtaΦi, kde je jednotka cd oznaΦenß jako d:\, tak se HTML strßnky neotev°ou, proto₧e je navigace na f:\index.htm. Jak² k≤d zde mß b²t pou₧it?

Musφte samoz°ejm∞ zjistit, jakΘ pφsmeno je p°i°azeno CD mechanice. NejjednoduÜÜφ zp∙sob jak toho dosßhnout ve Visual Basicu, je pou₧φt objekt FileSystemObject. Nejd°φve projdete jeho kolekci Drives, zjistφte typy jednotliv²ch mechanik a pokud existuje mechanika CD, m∙₧ete s nφ pracovat pomocφ objektu Drive, tzn. zjistit t°eba jφ p°i°azenΘ pφsmeno z vlastnosti DriveLetter. Abyste mohl pracovat s t∞mito objekty, musφte v projektu vytvo°it odkaz (References) na Microsoft Scripting Runtime Library.

Dim fso As New FileSystemObject, drv As Drive
Dim isCDROM As Boolean

isCDROM = False
For Each drv In fso.Drives
  If drv.DriveType = CDRom Then
    isCDROM = True
    Exit For
  End If
Next drv

If isCDROM Then
  Debug.Print drv.DriveLetter & ":\index.html"
Else
  MsgBox "V pocitaci neni CD mechanika."
End If


  Jak²m zp∙sobem je mo₧nΘ zapisovat a Φφst data na/z seriov² nebo paralelnφ port?

Na komunikaci s porty m∙₧ete pou₧φt nap°. knihovnu win95io.dll. Mß pouze dv∞ funkce, jednu k zßpisu na port, druhou ke Φtenφ. Pou₧itφ je velmi jednoduchΘ, staΦφ zadat adresu portu a zavolat funkci (pro zßpis je samoz°ejm∞ zapot°ebφ takΘ p°edat data). Knihovnu najdete na adrese www.softcircuits.com/sw_tools.htm, n∞jakΘ informace jak s nφ pracovat nap°. na www.aaroncake.net/electronics/vblpt.htm.


  Jak jde ud∞lat ve VB 5.0, aby byl umo₧n∞n pohyb myÜi pouze v programu? ZkouÜel jsem funkci API ClipCursor, ale neÜlo mi to.

Funkce API ClipCursor umo₧≥uje zamknout myÜ v zadanΘ oblasti, jejφ₧ sou°adnice musφ b²t v pixelech. NejjednoduÜÜφ je zjistit sou°adnice formulß° pomocφ funkce API GetWindowsRect a ty potom zadat funkci ClipCursor.

Dim ret As Long, r As RECT
ret = GetWindowRect(Form1.hwnd, r)
ret = ClipCursor(r)

Uvoln∞nφ kurzoru myÜi ze zadanΘho regionu provedete potom takto:

Dim r As RECT, ret As Long, dhWnd As Long
dhWnd = GetDesktopWindow()
ret = GetWindowRect(dhWnd, r)
ret = ClipCursor(r)


  Pot°ebuji nastavit datumy (LastAccess, Create, Change) zvolenΘho souboru na zvolenΘ datum. A jeÜt∞ by m∞ zajφmalo, jak² p°evodov² vztah existuje ve Windows pro zßpis datumu souboru ve formßtu FILETIME (dva Longy) a b∞₧n²m zßpisem datumu/Φasu. Vφm ₧e, existuje funkce FileDateTime, kterß zjiÜtuje datum souboru, ale pokud pou₧iju API, dostanu FILETIME.

V tomto p°φpad∞ prom∞nnß typu FILETIME p°edstavuje poΦet 100 nanosekundov²ch interval∙, kterΘ ub∞hly od 1. ledna 1601. Pokud chcete toto Φφslo p°evΘst na "normßlnφ" datum nebo Φas, musφte jej nejd°φv p°evΘst na lokßlnφ datum (Φasovß z≤na) pomocφ funkce API FileTimeToLocalFileTime a potom na srozumitelnΘ datum pomocφ API FileTimeToSystemTime. Tak zjistite rozumnΘ datum.

Dim hFile As Long, ret As Long
Dim ctime As FILETIME, atime As FILETIME, mtime As FILETIME
Dim stime As SYSTEMTIME

hFile = CreateFile("C:\soubor.txt", GENERIC_READ, FILE_SHARE_READ, ByVal CLng(0), OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
If hFile = -1 Then
  Debug.Print "Nelze otevrit soubor"
Else
  ret = GetFileTime(hFile, ctime, atime, mtime)
  ret = FileTimeToLocalFileTime(ctime, ctime)
  ret = FileTimeToSystemTime(ctime, stime)

  Debug.Print "Datum: " & stime.wDay & "." & stime.wMonth & "." & stime.wYear

  ret = CloseHandle(hFile)
End If

Pokud chcete datum a Φas nastavit, je postup opaΦn², tzn. nejd°φve nastavit prom∞nnou typu SYSTEMTIME. Tu p°evΘst na datum a Φas srozumiteln² pro systΘm (prom∞nna typu FILETIME) pomocφ API SystemTimeToFileTime. Nakonec tuto prom∞nou p°evedete pomocφ API LocalFileTimeToFileTime na sprßvnou Φasovou z≤nu a funkcφ API SetFileTime nastavφte datum a Φas souboru.


  Pred asi 2-3 mesiacmi som vßm poslal odpove∩ na otßzku v "Otßzky a odpov∞di" na Chip CD. Ke∩ som na nßsleduj·cich CD stßle naÜiel t·to otßzku, rßtal som z urΦit²m oneskorenφm ako d⌠vod, preΦo tam otßzka eÜte stßle je. Na moju odpove∩ ste mi odpφsali a preto som si myslel, ₧e pomohla. Posielam vßm teda moju odpove∩ a prφklad znovu ...

Pokud posφlßte jak²koliv dotaz nebo odpov∞∩ na dotaz, musφte v₧dy poΦφtat s urΦit²m spo₧d∞nφm. ╚asopis Chip a tedy i CD p°φloha je m∞sφΦnφk a CD se v₧dy p°ipravuje s urΦit²m p°edstihem. Odpov∞∩ na dotaz nap°. v Φφsle 5/2001 se proto neobjevφ v Φφsle nßsledujφcφm, jak byste p°edpoklßdali, ale spφÜe a₧ v Φφsle 7/2001, n∞kdy a₧ v 8/2001.


Otßzky bez odpov∞di

  NaÜel jsem v API vieweru funkci SetWindowsHook, ale jaksi ji neumφm pou₧φt. M∙₧ete mi prosφm napsat jednoduch² nßvod s p°φkladem?


  Jak lze p°ijφmat/posφlat data na n∞kter² z port∙ ve Windows 2000?


  Nevφte kde se dß sehnat (pokud existuje) prvek, kter² se chovß jako textovΘ pole ve Wordu?


  Pou₧φvßm VB6 a cht∞l bych z mΘho programu otev°φt soubor PhotoPaintu. K≤d vypadß nßsledovn∞:

Dim xApp as PHOTOPAINT.CPntAutomate
xApp.FileOpen ("nazov suboru")

Bohu₧el to takto nefunguje. Co jeÜt∞ musφm zadat, aby se soubor otev°el?


  Jak zjistit, kolik bajt∙ bylo sta₧eno p°es Internet v p°edem danΘ dob∞? Jde mi o p°ipojenφ p°es lokßlnφ sφ¥, ne p°es modem.


  Pot°ebuji ve Visual Basicu pφpnout, tj. vydat zvuk o urΦitΘ frekvenci a dΘlce. Myslel jsem na funkci API Beep, ta vÜak umo₧≥uje pφpnout pouze ve Windows NT, ve Windows 9x p°ehraje systΘmov² zvuk.


  Jak se dß p°epφnat klßvesnice? Nap°. z anglickΘ do ΦeskΘ a nazp∞t.


  Jak se dß ve Visual basicu ovlßdat USB port?


  Ve Windows 98 jsem vytvo°il program s ovlßdacφm prvkem Timer. Program fungoval bez problΘm∙, ale kdy₧ jsem jej spustil na Windows 2000, prvek Φasoval asi 5x rychleji. Nevφte so s tφm?


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