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