ZdrojovΘ k≤dy

Vykreslenφ grafu Program
Tisk dat z databßze Program
Subclasing control Program
Popis chyby Windows Program
Visual Basic a rok 2000 Tip
API funkce SHFormatDrive K≤d
API funkce GetSystemMetrics K≤d
Zaheslovanß databßze Access, ₧ßdn² problΘm K≤d
Skrytß polo₧ka v²Φtu K≤d
Prßzdnß strßnka v prohlφ₧eΦi K≤d
MultiSelect ListBox K≤d
V²b∞r textu v TextBoxu K≤d
Jak p°eskoΦit na konec textu v TextBoxu K≤d
ENTER se chovß stejn∞ jako TAB K≤d
Rozklad barvy na RGB slo₧ky K≤d

Vykreslenφ grafu

Program, kter² ukazuje, jak za pomocφ PictureBoxu nakreslit graf, v tomto p°φpad∞ z dat v databßzi.
6032 byt∙ Kopφrovat

Zp∞t na obsah


Tisk dat z databßze

Nemßte-li rßdi aplikaci Crystal report, zkuste tisknout z databßze sami pomocφ objektu Printer. Zde je mal² p°φklad.
7321 byt∙ Kopφrovat

Zp∞t na obsah


Subclasing control

Proto₧e zde nenaleznete program, ale ActiveX prvek, hodil by se tento p°φsp∞vek spφÜe do Φßsti ActiveX. Obsahuje vÜak i sv∙j zdrojov² k≤d a 8 p°φklad∙, proto jsme jej za°adili sem. A co umφ? Prvek umφ detekovat zprßvy, kterΘ nejsou p°φmo podporovßny Visual Basicem.
46383 byt∙ Kopφrovat

Zp∞t na obsah


Popis chyby Windows

Pokud nastane n∞jakß chyba, v∞tÜinou chcete dßt u₧ivateli v∞d∞t jakß. Jak zobrazit popis chyb, kterΘ vyvolßvß operaΦnφ systΘm, najdete v tomto programu.
1652 byt∙ Kopφrovat

Zp∞t na obsah


Visual Basic a rok 2000

Pokud pou₧φvßte Φty°mφstn² formßt pro vyjßd°enφ roku, nemusφte si s p°echodem na rok 2000 d∞lat ₧ßdnΘ starosti. Pokud vÜak pou₧φvßte pouze dvoumφstn² formßt, budou pro vßs dalÜφ informace urΦit∞ d∙le₧itΘ.

Visual Basic do verze 3.0 vΦetn∞

V t∞chto verzφch, je jak²koliv dvoumφstn² rok pova₧ovßn za rok 20. stoletφ. Tedy jak²koliv dvoumφstn² rok bude p°eveden na rok zaΦφnajφcφ 19. Nap°. 95, bude 1995, 21 bude 1921 atd.

Visual Basic 4.0

Proto₧e od tΘto verze nejsou funkce pro datum implementovßny v runtime knihovnßch, ale v knihovn∞ OLE Automation, zßle₧φ p°i p°evodu data na verzi knihoven OLE Automation. Jedinß funkce, kterß je nadßle v runtime knihovnßch je DateSerial. Pro nφ platφ stejnΘ pravidlo jako pro 16-bitovΘ aplikace.

V 16-bitov²ch aplikacφch (16-bitovß verze OLE) jsou veÜkerΘ dvoumφstnΘ roky p°evedeny na stoletφ aktußlnφho systΘmovΘho data. Tzn. mßte-li systΘmovΘ datum 2001, bude rok 23 p°eveden na 2023, je-li systΘmovΘ datum 1998, bude rok 23 p°eveden na 1923.

Ve 32-bitov²ch aplikacφch je situace stejnß, je-li nainstalovßn pouze VB 4.0 (knihovna OLE Automation - OleAut32.DLL - verze 2.1). Pokud mßte verzi 2.2 a vyÜÜφ (nap°. v produktech Internet Explorer 3.0 a vyÜÜφ, Windows NT 3.51 SP5, Windows NT 4.0, Windows 95 OSR 2, Office 97, Visual Basic 5.0, a dalÜφ), je dvoumφstn² rok 30 a₧ 99 p°eveden na 1930 a₧ 1999, rok 00 a₧ 29 je p°eveden na 2000 a₧ 2029.

Visual Basic 5.0 a vyÜÜφ

U tΘto a vyÜÜφ verze Visual Basicu jsou vÜechny dvoumφstnΘ roky (vΦetn∞ pou₧itφ funkce DateSerial) 30 a₧ 99 p°evedeny na 1930 a₧ 1999, roky 00 a₧ 29 jsou p°evedeny na 2000 a₧ 2029.

Zp∞t na obsah


API funkce SHFormatDrive

Na midulΘm CD jsme uvedli tip, jak pomocφ funkce SHFormatDrive naformßtovat disketu. Zde naleznete cel² popis tΘto funkce.

Declare Function SHFormatDrive Lib "shell32"(ByVal hwndOwner As Long, _
   ByVal iDrive As Long, ByVal iCapacity As Long, ByVal iFormatType As Long) As Long

hwndOwner - handle okna, ke kterΘmu se vztahuje dialog
iDrive - mechanika k formßtovßnφ (A = 0, B = 1, atd.)
iCapacity - v²slednß kapacita mΘdia

	'Konstanty pro Windows 95
	Public Const SHFD_CAPACITY_DEFAULT = 0  'defaultnφ kapacita
	Public Const SHFD_CAPACITY_360 = 3      '360 kB
	Public Const SHFD_CAPACITY_720 = 5      '720 kB

iFormatType - typ formßtovßnφ

	'Konstanty pro Windows 95
	Public Const SHFD_FORMAT_QUICK = 0      'rychl² formßt
	Public Const SHFD_FORMAT_FULL = 1       'pln² formßt
	Public Const SHFD_FORMAT_SYSONLY = 2    'zkopφrovat pouze systΘmovΘ soubory
	'Konstanty pro Windows NT
	Public Const SHFD_FORMAT_FULL = 0       'pln² formßt
	Public Const SHFD_FORMAT_QUICK = 1      'rychl² formßt 

Zp∞t na obsah


API funkce GetSystemMetrics

Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long 

Funkce GetSystemMetrics vracφ informace o mnoha r∙zn²ch v∞cech ve Windows. Mnoho z nich je velikost objekt∙, nap°. obrazovky, ikon, atd. Dßle takΘ poskytuje informace o systΘmu. Jakou informaci funkce vrßtφ, je zßvislΘ na parametru nIndex. Jeho hodnoty mohou b²t nßsledujφcφ.

SM_ARRANGE = 56
  Pouze Win95/98 - vracφ metodu pou₧itou k zobrazenφ minimalizovan²ch oken: Hodnota je
  kombinacφ dvou nßsledujφcφch. Jedna pro poΦßteΦnφ pozici a druhß je vzdßlenost, v jakΘ
  je p°idßna dalÜφ.
  ARW_BOTTOMLEFT = 0
    zaΦφnß v levΘm spodnφm rohu obrazovky
  ARW_BOTTOMRIGHT = 1
    zaΦφnß v pravΘm spodnφm rohu obrazovky
  ARW_TOPLEFT = 2
    zaΦφnß v levΘm hornφm rohu obrazovky
  ARW_TOPRIGHT = 3
    zaΦφnß v pravΘm hornφm rohu obrazovky
  ARW_LEFT = 0
    p°idß ikonu vlevo od existujφcφ
  ARW_UP = 0
    p°idß ikonu nad existujφcφ
  ARW_RIGHT = 4
    p°idß ikonu vpravo od existujφcφ
  ARW_DOWN = 4
    p°idß ikonu pod existujφcφ
  ARW_HIDE = 8
    neumφstφ ikonu
SM_CLEANBOOT = 67
  Pouze Win95/98 - vracφ, jak byl poΦφtaΦ nastartovßn. 0 normßln∞, 1 nouzov² start,
  2 nouzov² start s pracφ v sφti
SM_CMOUSEBUTTONS = 43
  PoΦet tlaΦφtek myÜi, 0 v p°φpad∞, ₧e myÜ nenφ nainstalovanß
SM_CXBORDER = 5
  WinNT - Üφ°ka pozadφ okna
  Win95/98 - Üφ°ka pozadφ "single" okna
SM_CXCURSOR = 13
  WinNT - Üφ°ka kurzoru
  Win95/98 - Üφ°ka standardnφ kurozorovΘ bitmapy
SM_CXDLGFRAME = 7
  Pouze WinNT - Üφ°ka rßmu dialogu
SM_CXDOUBLECLK = 36
  èφ°ka obdΘlnφku, ve kterΘm musφ b²t dvakrßt kliknuto pro rozpoznßnφ double-click
SM_CXDRAG = 68
  Minimßlnφ Üφ°ka, o kterou se musφ kurzor pohnout pro zaΦßtek operace drag-and-drop
SM_CXEDGE = 45
  Pouze Win95/98 - Üφ°ka 3D pozadφ okna
SM_CXFRAME = 32
  Pouze WinNT - Üφ°ka pozadφ okna, kterΘ m∙₧e m∞nit velikost
SM_CXFULLSCREEN = 16
  èφ°ka plochy v okn∞, kterΘ je roztßhnuto na celou obrazovku
SM_CXHSCROLL = 21
  Pouze Win95/98 - Üφ°ka bitmapy ukazatele na horizontßlnφm ScrollBaru
SM_CXHTHUMB = 10
  èφ°ka "posuvnφku" horizontßlnφho ScrollBaru
SM_CXICON = 11
  Standardnφ (default) Üφ°ka ikony
SM_CXICONSPACING = 38
  WinNT - Üφ°ka bu≥ky pro umφst∞nφ ikony
  Win95/98 - Üφ°ka bu≥ky pro umφst∞nφ ikony v pohledu VelkΘ ikony (Large View)
SM_CXMAXIMIZED = 61
  Pouze Win95/98 - standardnφ Üφ°ka maximalizovanΘho okna
SM_CXMAXTRACK = 59
  Pouze Win95/98 - standardnφ maximßlnφ Üφ°ka, na kterou je mo₧nΘ zv∞tÜit okno
SM_CXMENUCHECK = 71
  Pouze Win95/98 - Üφ°ka standardnφ bitmapy pro zobrazenφ check-mark menu
SM_CXMENUSIZE = 54
  Pouze Win95/98 - Üφ°ka tlaΦφtka v menu (menu bar button)
SM_CXMIN = 28
  Minimßlnφ Üφ°ka okna
SM_CXMINIMIZED = 57
  Pouze Win95/98 - Üφ°ka normßlnφho minimalizovanΘho okna
SM_CXMINSPACING = 47
  Pouze Win95/98 - Üφ°ka bu≥ky pro zobrazovßnφ minimalizovan²ch oken
SM_CXMINTRACK = 34
  Pouze Win95/98 - standardnφ minimßlnφ Üφ°ka, kam je u₧ivateli dovoleno zmenÜit okno
SM_CXSCREEN = 0
  èφ°ka obrazovky
SM_CXSIZE = 30
  WinNT - Üφ°ka bitmapy titulku okna (TitleBar)
  Win95/98 - Üφ°ka tlaΦφtka v titulku okna
SM_CXSIZEFRAME = 32
  Pouze Win95/98 - Üφ°ka "Thick" rßmu okna
SM_CXSMICON = 49
  Pouze Win95/98 - doporuΦenß Üφ°ka pro malΘ ikony
SM_CXSMSIZE = 52
  Pouze Win95/98 - Üφ°ka malΘho tlaΦφtka v titulku okna
SM_CXVSCROLL = 2
  Pouze Win95/98 - Üφ°ka vertikßlnφho ScrollBaru
SM_CYBORDER = 6
  WinNT - v²Üka pozadφ okna
  Win95/98 - v²Üka pozadφ "single" okna
SM_CYCAPTION = 4
  V²Üka plochy titulkovΘho pruhu
SM_CYCURSOR = 14
  WinNT - v²Üka kurzoru
  Win95/98 - v²Üka standardnφ kurzorovΘ bitmapy
SM_CYDLGFRAME = 8
  Pouze WinNT - v²Üka rßmu dialogu
SM_CYDOUBLECLK = 37
  V²Üka obdΘlnφku, do kterΘho je nutno kliknout myÜφ pro rozpoznßnφ double-click
SM_CYDRAG = 69
  Minimßlnφ v²Üka o kterou se musφ posunou kurzor pro zaΦßtek operace drag-and-drop
SM_CYEDGE = 46
  Pouze Win95/98 - v²Üka 3D pozadφ okna
SM_CYFRAME = 33
  Pouze WinNT - v²Üka pozadφ okna, kterΘ m∙₧e m∞nit velikost
SM_CYFULLSCREEN = 17
  V²Üka plochy okna, kterΘ je p°es celou obrazovku (full-screen)
SM_CYHSCROLL = 3
  Pouze Win95/98 - v²Üka horizontßlnφho ScrollBaru
SM_CYICON = 12
  Standardnφ v²Üka ikony
SM_CYICONSPACING = 39
  WinNT - v²Üka bu≥ky pro umφst∞nφ ikony
  Win95/98 - v²Üka bu≥ky pro umφst∞nφ ikony v pohledu VelkΘ ikony (Large icon view)
SM_CYMAXIMIZED = 62
  Pouze Win95/98 - standardnφ v²Üka maximalizovanΘho okna
SM_CYMAXTRACK = 60
  Pouze Win95/98 - standardnφ maximßlnφ v²Üka, kam m∙₧e u₧ivatel roztßhnout okno
SM_CYMENU = 15
  V²Üka panelu menu
SM_CYMENUCHECK = 72
  Pouze Win95/98 - v²Üka standardnφ bitmapy pro zobrazenφ check-mark menu
SM_CYMENUSIZE = 55
  Pouze Win95/98 - v²Üka tlaΦφtka v menu (menu bar button)
SM_CYMIN = 29
  Minimßlnφ v²Üka okna
SM_CYMINIMIZED = 58
  Pouze Win95/98 - v²Üka normßlnφho minimalizovanΘho okna
SM_CYMINSPACING = 48
  Pouze Win95/98 - v²Üka bu≥ky pro umφst∞nφ minimalizovanΘho okna
SM_CYMINTRACK = 35
  Pouze Win95/98 - standardnφ minimßlnφ v²Üka, na kterou m∙₧e u₧ivatel zmenÜit okno
SM_CYSCREEN = 1
  V²Üka obrazovky
SM_CYSIZE = 31
  WinNT - v²Üka bitmapy titulkovΘho pruhu
  Win95/98 - v²Üka tlaΦφtka v titulkovΘm pruhu
SM_CYSIZEFRAME = 33
  Pouze Win95/98 - v²Üka rßmu "thick" okna
SM_CYSMCAPTION = 51
  Pouze Win95/98 - v²Üka plochy malΘho titulku
SM_CYSMICON = 50
  Pouze Win95/98 - doporuΦenß v²Üka pro malΘ ikony
SM_CYSMSIZE = 53
  Pouze Win95/98 - v²Üka malΘho tlaΦφtka v titulkovΘm pruhu
SM_CYVSCROLL = 20
  Pouze Win95/98 - v²Üka bitmapy ukazatele na vertikßlnφm ScrollBaru
SM_DEBUG = 22
  Vracφ nenulovou hodnotu, pokud je nainstalovßna ladφcφ verze USER.EXE, 0 pokud ne
SM_MENUDROPALIGNMENT = 40
  Vracφ nenulovou hodnotu, pokud se popup menu zobrazuje vpravo, 0 v p°φpad∞
  zobrazovßnφ vlevo
SM_MIDEASTENABLED = 74
  Vracφ nenulovou hodnotu, jestli je system nastaven na pou₧itφ HebrejÜtiny
  a ArabÜtiny, 0 pokud ne
SM_MOUSEPRESENT = 19
  Vracφ nenulovou hodnotu, jestli₧e je myÜ nainstalovßna a rozpoznßna, 0 pokud ne
SM_NETWORK = 63
  Pokud je nainstalovßna sφ¥, nastavφ bit &H1 nßvratovΘ hodnoty.
SM_PENWINDOWS = 41
  Vracφ nenulovou hodnotu, jestli₧e je nainstalovßno rozÜφ°enφ MS Windows
  for Pen computing, jinak 0
SM_SLOWMACHINE = 73
  Vracφ nenulovou hodnotu, pokud mß PC pomal² procesor, 0 pokud ne
SM_SWAPBUTTON = 23
  Vracφ nenulovou hodnotu, pokud jsou p°ehozena tlaΦφtka myÜi (levΘ za pravΘ a naopak)

Zp∞t na obsah


Zaheslovanß databßze Access, ₧ßdn² problΘm

Zaheslovali jste si databßzi Access a neznßte heslo? Pou₧ijte tuto VELICE JEDNODUCHOU funkci. Na ofsetu &H42 (neboli 66) staΦφ p°eΦφst 13 znak∙ a pou₧φt funkci XOR s jednotn²m klφΦem a hle, heslo je na sv∞t∞. Databßze m∙₧e b²t klidn∞ i zaÜifrovanß, postup se v∙bec nem∞nφ.

Public Function DejMDBHeslo(ByVal soubor As String) As String
  Dim i As Long, s As Integer, strKlic As String
  Dim strHeslo As String, strCti As String * 13

  If Len(Dir(soubor)) = 0 Then
    MsgBox "Soubor neexistuje"
  Else
    strKlic = "å√∞7]D£·╞^(µ"

    s = FreeFile
    Open soubor For Binary As #s
      Get #s, 67, strCti
    Close s

    For i = 0 To 12
      strHeslo = strHeslo & _
        Chr(Asc(Mid(strCti, i + 1, 1)) Xor Asc(Mid(strKlic, i + 1, 1)))
    Next i

    DejMDBHeslo = strHeslo
  End If
End Function

Kdo tomu nev∞°φte, zkopφrujte si tento progrßmek, spus¥te jej a potom zkuste databßzi otev°φt z heslem, kterΘ vßm nabφdl.

Zp∞t na obsah


Skrytß polo₧ka v²Φtu

Chcete-li mφt n∞kterou polo₧ku ve v²ΦtovΘm typu skrytou, uzav°ete ji do hranat²ch zßvorek a p°ed nßzev dejte podtr₧φtko. CelΘ to m∙₧e vypadat t°eba takto:

Public Enum mujVycet
  prvni=1
  druhy=2
  [_skryty]=3
  posledni=4
End Enum

V tomto p°φpad∞ je skrytß polo₧ka [_skryty].

Zp∞t na obsah


Prßzdnß strßnka v prohlφ₧eΦi

Jestli₧e pou₧φvßte prvek WebBrowser, a chcete zobrazit prßzdnou strßnku, zkuste tento k≤d:

Public Sub PrazdnaWWW(browser AS WebBrowser)
  browser.Navigate "about:blank"
End Sub

Je to v²hodnΘ u₧ z toho d∙vodu, ₧e WebBrowser vypadß s prßzdnou strßnkou mnohem lΘpe ne₧ bez jakΘkoliv strßnky (p°idß ScrollBar a ud∞lß ze sebe 3D okno).

Zp∞t na obsah


MultiSelect ListBox

Mßte-li povolen MultiSelect (u ListBoxu) a chcete zjistit, kterΘ polo₧ky jsou vybranΘ, nenφ jinΘ cesty ne₧ tΘto:

Dim i As Long

For i = 0 To List1.ListCount - 1
  If List1.Selected(i) Then
    Debug.Print "Polo₧ka " & List1.List(i) & " je vybrßna."
  End If
Next i

Pokud znß n∞kdo lepÜφ zp∙sob, nevßhejte a napiÜte.

Zp∞t na obsah


V²b∞r textu v TextBoxu

P°esune-li se u₧ivatel VaÜeho programu na n∞jakΘ textovΘ pole (po naÜem TextBox), Φasto chce p∙vodnφ text automaticky oznaΦit. Jak to ud∞lat? Vyberte si, co se vßm lφbφ vφce:

Private Sub Text1_GotFocus()
  SendKeys "{home}+{end}"
End Sub

Private Sub Text1_GotFocus()
  Text1.SelStart = 0
  Text1.SelLength = Len(Text1.Text)
End Sub

Zp∞t na obsah


Jak p°eskoΦit na konec textu v TextBoxu

Text1.SelStart = Len(Text1.Text)

To je opravdu vÜechno.

Zp∞t na obsah


ENTER se chovß stejn∞ jako TAB

Na stisk klßvesy TAB se focus (fokus, ohnisko ...) p°esune na dalÜφ prvek. Chcete-li tohoto dosßhnout i po stisku klßvesy ENTER, pou₧ijte tento k≤d:

Private Sub Form_KeyPress(KeyAscii As Integer)
  If KeyAscii = vbKeyReturn Then
    KeyAscii = 0
    SendKeys "{TAB}"
  End If
End Sub

Zp∞t na obsah


Rozklad barvy na RGB slo₧ky

Mno₧stvφ ΦervenΘ, zelenΘ a modrΘ barvy v barv∞ urΦenΘ jednφm Φφslem zφskßme takto:

cervena = barva Mod 256
zelena = (barva \ 256) Mod 256
modra = barva \ 256 \ 256

Pokud dostanete Φφslo v pon∞kud jinΘm formßtu (systΘmovΘ barvy, t°eba &H7000000B), vykreslete v tΘto barv∞ bod na obrazovku a zjist∞te jeho barvu takto:

PSet (1,1),&H7000000B	'vykresleni bodu
barva=Point(1,1)	'zjisteni barvy

S takto zjiÜt∞nou barvou u₧ m∙₧ete zopakovat v²Üe uveden² postup rozkladu na jednotlivΘ slo₧ky RGB.

Zp∞t na obsah