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

  Pot°ebuji program, kter² bude pracovat v rozliÜenφ 640x480. Jak zm∞nφm rozliÜenφ obrazovky? P°φpadn∞ jak jej po skonΦenφ programu vrßtφm do p∙vodnφho stavu?

RozliÜenφ obrazovky zm∞nφte pomocφ funkce API ChangeDisplaySettings. Nejd°φve je vÜak pot°eba otestovat, zda obrazovka zadanΘ rozliÜenφ podporuje. Toho dosßhnete pomocφ parametru CDS_TEST. Pokud ano, pomocφ stejnΘ funkce, ale ji₧ s parametrem CDS_UPDATEREGISTRY jej zm∞nφte. Pokud jde o nßvrat zp∞t, staΦφ si pomocφ funkce API EnumDisplaySettings zjistit stßvajφcφ rozliÜenφ, ulo₧it si jeho parametry a po skonΦenφ programu jej nastavit. Vφce v tomto p°φkladu.


  Pot°ebuji text odd∞len² Φßrkami ("letadlo,motor,pes") z prom∞nnΘ typu String rozd∞lit na jednotlivΘ polo₧ky.

Tento problΘm °eÜφ funkce Split. Zadßte jφ po₧adovan² °et∞zec a druh odd∞lovaΦe, funkce vßm vrßtφ jednorozm∞rnΘ pole, kde ka₧dß polo₧ka obsahuje jedno slovo.

Dim i As Long, s As String, p() As String

s = "prvni,druha,treti,ctvrta"
p = Split(s, ",")
For i = 0 To UBound(p)
  Debug.Print p(i)
Next i


  Jak zobrazφm dialog pro formßtovßnφ disket?

Dialog pro formßtovßnφ disket zobrazφ funkce API SHFormatDrive. Kter² disk se zformßtuje, urΦuje parametr Drive (zadßvß se jako po°adovΘ Φφslo, tzn. A je 0, B je 1 atd.).

Declare Function SHFormatDrive Lib "shell32" (ByVal hWnd As Long, ByVal Drive As Long, ByVal fmtID As Long, ByVal Options As Long) As Long

Dim d As Long
d = Asc("A") - 65
SHFormatDrive Form1.hWnd, d, &HFFFF, 0

Poslednφ parametr jen p°ednastavφ n∞kterΘ mo₧nosti, 0 - rychl² formßt (quick format), 1 - kompletnφ formßt (full format), 2 - zkopφrovßnφ systΘmov²ch soubor∙. Ostatnφ parametry asi nenφ pot°eba vysv∞tlovat (frmtID nem∞≥te, nechte jej nastaven tak jak je v p°φkladu).


  Jak vlo₧φm do RichTextBoxu na aktußlnφ pozici kurzoru libovoln² text?

Pomocφ vlastnosti SelText. Pokud je n∞jak² text vybrßn, nahradφ jej, pokud ne, vlo₧φ zadan² text na pozici kurzoru. Stejn² zp∙sob funguje i pro TextBox.

rtf1.SelText = "nov² text"


  Jak mohu p°ijφmat a odesφlat data na sΘriov² port.

Na prßci se sΘriov²m portem je ve VB prvek MSComm. V MSDN k n∞mu najdete celkem dobr² p°φklad na pou₧itφ. Pokud by vßm nevyhovoval, m∙₧ete pou₧φt n∞kterou z knihoven na Internetu, je jich spousta, dobrß je nap°. win95io.dll.


  Jak p°esn∞ slou₧φ CommonDialog k tisku a jak uplatnit toto nastavenφ nap°. pro tisk z RichTextBoxu?

Detailnφ popis nastavenφ tisku najdete dob°e popsan² v MSDN. K vyvolßnφ dialogu slou₧φt metoda ShowPrinter. Pokud jde o tisk z RichTextBoxu, nastavte vlastnost Flags na hodnotu cdlPDReturnDC (&H100), co₧ zajistφ, ₧e je vrßcen device kontext vybranΘ tiskßrny ve vlastnosti dialogu hDC. Tisk z RichTextBoxu je potom proveden metodou SelPrint, kterß mß jako parametr i device kontext za°φzenφ, na kterΘ se mß tisk provΘst.

Dim i As Long

dlg1.Flags = cdlPDReturnDC + cdlPDUseDevModeCopies
dlg1.ShowPrinter
For i = 1 To dlg1.Copies
  rtf1.SelPrint dlg1.hDC
Next i

DalÜφ mo₧nost je vyu₧itφ vlastnosti dialogu PrinterDefault na hodnotu True. Vybranß tiskßrna se potom stane default tiskßrnou a tisk pomocφ objektu Printer je proveden na ni.


  Narazil jsem na problΘm s prvkem ADODC (ADO Data Control). V databßzi mßm pole, kterΘ obsahuje Φφsla barev. Chci za°φdit aby se pozadφ prvku Image m∞nilo v zßvislosti na hodnotßch v databßzi, tzn. kliknu-li na tlaΦφtko na prvku ADODC, zm∞nφ se pozadφ na zßklad∞ aktußlnφ hodnoty v databßzi stejn∞ jako nap°. text v TextBoxu.

Vlastnost BackColor nenφ mo₧no automaticky navßzat na prvek ADODC. Musφte si pozadφ nastavit sßm, nejlΘpe jako reakci na udßlost MoveComplete.

Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset20)
  If (Not pRecordset.EOF) And (Not pRecordset.BOF) Then
    Picture1.BackColor = pRecordset.Fields("barva")
  End If
End Sub


Otßzky bez odpov∞di

  Pot°eboval bych poradit, jak ze souboru MP3 zφskat informaci, jak je pφse≥ v n∞m obsa₧enß dlouhß (staΦilo by mi, jak zjistit poΦet kbps).


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