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 zjistit ve Visual Basicu 6 cestu ke slo₧kßm Plocha a Nabφdka Start ve Windows 98?

Cestu k ploÜe a nabφdce start zjistφte pomocφ funkce API SHGetSpecialFolderPath. Jako parametr je musφte funkci zadat identifikßtor slo₧ky, kterou chcete znßt. Pro slo₧ku Plocha je to konstanta CSIDL_DESKTOPDIRECTORY pro Nabφdku start CSIDL_STARTMENU.

Declare Function SHGetSpecialFolderPath Lib "shell32.dll" _
  Alias "SHGetSpecialFolderPathA" (ByVal hwndOwner As Long, _
  ByVal lpszPath As String, ByVal nFolder As Long, _
  ByVal fCreate As Long) As Long
Const CSIDL_STARTMENU = &HB
Const CSIDL_DESKTOPDIRECTORY = &H10

Dim cesta As String
cesta = Space(260)
SHGetSpecialFolderPath Form1.hWnd, cesta, CSIDL_STARTMENU, 0
Debug.Print Left(cesta, InStr(1, cesta, Chr(0)) - 1)

Cestu ke slo₧kßm m∙₧ete zjistit i z registru a to z klφΦe HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders a polo₧ek Desktop pro Plochu a Start Menu pro Nabφdku start.


  Mohu do ListBoxu n∞jak umφstit posuvnφky?

Vertikßlnφ ScrollBar se zobrazφ automaticky, je-li v ListBoxu vφce polo₧ek, ne₧ je schopen narßz zobrazit. Horizontßlnφ ScrollBar je mo₧nΘ zobrazit zaslßnφm zprßvy LB_SETHORIZONTALEXTENT. Parametr wParam funkce SendMessage urΦuje poΦet pixel∙ pro pohyb, tzn. nejlΘpÜφ je zadat dΘlku nejdelÜφho textu v ListBoxu (dΘlku textu vracφ funkce metoda TextWidth).

Private Sub Form_Load()
  'napln∞nφ ListBoxu
  List1.AddItem "prvnφ polo₧ka"
  List1.AddItem "druhß dlouhß polo₧ka, kterß se nevejde do Üφ°ky ListBoxu"

  'vlo₧enφ ScrollBaru se sprßvnou Üφ°kou
  SendMessage List1.hwnd, LB_SETHORIZONTALEXTENT, _
        MaxText / Screen.TwipsPerPixelX, 0&
'MaxText je funkce, kterß zjistφ dΘlku nejdelÜφho textu v twipech
End Sub


  Jak mohu v RichTextBoxu nastavit vybran² text jako hornφ nebo dolnφ index?

pro vytvo°enφ hornφho nebo dolnφho indexu mß prvek RichTextBox vlastnost SelCharOffset. Nastavuje vzdßlenost pφsma od zßkladnφ Φßry v twipech. Zadßte-li kladnou hodnotu, pφsmo se posouvß nad zßkladnφ Φßru (hornφ index), zadßte-li zßpornou, posouvß se pod zßkladnφ Φßru (dolnφ index).

With RichTextBox1
  'vytvo°φ normßlnφ text - velikost pφsma 20
  .SelFontSize = 20
  .Text = "5*E"
  'vytvo°φ hornφ index - velikost pφsma 8
  .SelStart = Len(.Text)
  .SelFontSize = 8
  .SelCharOffset = 200
  .SelText = 15
End With


  Rßd bych ve svΘ aplikaci vyu₧φval zßpis/Φtenφ z/na sΘriov² port (com1 nebo com2). Vφm, ₧e ve VB je na to MSComm32.ocx, ale tu nemohu pou₧φt, mßm VB6 Learning Edition a p°i pokusu o pou₧itφ tΘto komponenty mi to hlasi chybu, ₧e nemß informace o registraci. P°edpoklßdßm proto, ₧e ji v tΘto verzi nemßm oprßvn∞nφ pou₧φt. Nevφte proto o n∞jakΘ jinΘ (freeware) komponent∞, kterß by to jednoduch²m (ale opravdu jednoduch²m) zp∙sobem um∞la takΘ?

Dobrß knihovna pro komunikaci se sΘriov²mi porty je nap°φklad win95io.dll. Pou₧itφ v nφ obsa₧en²ch funkcφ je velmi jednoduchΘ. Mß pouze dv∞ funkce, vbOut a vbInp, kter²m zadßte pouze adresu portu (v p°φpad∞ vbOut takΘ samoz°ejm∞ posφlanß data). Najdete ji na strßnkßch spoleΦnosti SoftCircuits. Pokud pot°ebujete komunikovat se sΘriov²mi porty na 16-bitov²ch Windows, najdete na tΘ₧e strßnce knihovnu vbAsm, kterß tento problΘm °eÜφ.


  Jak mohu zjistit zßkladnφ informace o sloupci tabulky databßze MS Access pomocφ objektovΘho modelu ADO.

Pokud chcete informace pomocφ ADO, staΦφ otev°φt pat°iΦnou tabulku (Recordset). Objekt Recordset mß kolekci Fields objekt∙ Field, kter² obsahuje r∙znΘ vlastnosti sloupce v tabulce.

'rs je typ ADODB.Recordset, con je otev°enΘ spojenφ, ADODB.Connection, fld je ADODB.Field rs.Open "tabulka", con, adOpenStatic Set fld = rs.Fields("pole") 'VypφÜe typ a definovanou dΘlku sloupce Debug.Print fld.Type; fld.DefinedSize;

Pokud chcete vφce informacφ, ne₧ poskytuje typ Field, m∙₧ete pou₧φt knihovnu ADOX (ADO Extension for DDL and Security). Sloupec tabulky zde p°edstavuje objekt Column, kte kterΘmu se m∙₧ete dostat nap°. takto:

Dim cat As New ADOX.Catalog, tb As ADOX.Table, col As ADOX.Column

cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security" & _
    Info=False;Data Source=D:\data.mdb"
Set tb = cat.Tables("tabulka")
Set col = tb.Columns("sloupec1")

Pomocφ knihovny ADOX m∙₧ete strukturu databßze takΘ upravovat, vytvß°et novΘ databßze atd.


  Pot°ebuji v∞d∞t, jak mohu v prvku SSTab odstranit urΦitou zßlo₧ku.

U prvku SSTab nejde odstranit libovolnß zßlo₧ka. M∙₧ete pouze zmenÜit poΦet zßlo₧ek, nastavenφm jejich poΦtu, ale v₧dy se odstra≥ujφ zßlo₧ky od konce. Zßlo₧ku vÜak m∙₧ete skr²t pomocφ vlastnosti TabVisible.

'Skrytφ zßlo₧ky s indexem 3
ss1.TabVisible(3) = False


  Jak napsat SQL dotaz, kter² vypφÜe zßznamy s urΦit²m datem ze sloupce Datum (nap°. 1.5.2001 - 5.5.2001)

M∙₧ete pou₧φt nap°. funkci DateValue.

SELECT * FROM Tabulka WHERE datum BETWEEN DateValue('21.6.2001') AND DateValue('25.6.2001')

nebo zadat datum p°φmo ve formßtu #mm/dd/yyyy#, tj.

SELECT * FROM Tabulka WHERE datum BETWEEN #5/18/2001# AND #5/25/2001#


  Jak mohu vymazat obsah slo₧ky Temp, pokud nevφm, na kterΘm disku jsou Windows nainstalovßny? ZkouÜel jsem to takto, ovÜem neÜlo to:

Dim fso As Object, tmp
Set fso = CreateObject("Scripting.FileSystemObject")
tmp = fso.GetSpecialFolder(2) + "\*.*"
Set fso = Nothing
Kill tmp

Pokud se sna₧φte smazat cel² obsah, nejde to tak jednoduÜe. Ve slo₧ce toti₧ mohou b²t takΘ adresß°e, kterΘ pomocφ Kill nesma₧ete. Nejd°φve je pot°eba zjistit cel² obsah slozky Temp, adresß°e smazat pomocφ RmDir a soubory pomocφ Kill. NicmΘn∞ pokud se sna₧φte smazat vÜechny soubory, m∙₧e b²t chyba v tom, ₧e n∞kterΘ pou₧φvajφ jinΘ programy a v²maz nedovolφ.


Otßzky bez odpov∞di

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