Otázky a odpovědi

V této rubrice najdete odpovědi na své otázky, které můžete zasílat na adresu vbtipy@atlas.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

  Uz rok sa snazim programovat vo Visual Basic 5 a celkom mi to ide. Ale neviem prist na jednu vec. Chcel by som urobit taky program, ktory by otvoril hru Solitaire. To zatial viem spravit, ale neviem spravit to, ze ked kliknem na krizik, co je na vrchu okna, na tom modrom (ukoncit program), aby sa mi ukoncil program vo VB5.

Pokud chcete, aby se ukončil program, po ukončení hry Solitaire, spusťte Solitaire pomocí následující funkce (program se po spuštění zastaví) a po jejím ukončení, tzn. po ukončení Solitaire dejte funkci na ukončení programu.

Private Type STARTUPINFO
  cb As Long
  lpReserved As String
  lpDesktop As String
  lpTitle As String
  dwX As Long
  dwY As Long
  dwXSize As Long
  dwYSize As Long
  dwXCountChars As Long
  dwYCountChars As Long
  dwFillAttribute As Long
  dwFlags As Long
  wShowWindow As Integer
  cbReserved2 As Integer
  lpReserved2 As Long
  hStdInput As Long
  hStdOutput As Long
  hStdError As Long
End Type
 
Private Type PROCESS_INFORMATION
  hProcess As Long
  hThread As Long
  dwProcessID As Long
  dwThreadID As Long
End Type
 
Private Declare Function WaitForSingleObject Lib "kernel32" _
  (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CreateProcessA Lib "kernel32" _
  (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, _
   ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
   ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
   ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
   lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&
 
Public Sub ExecCmd(cmdline$)
  Dim proc As PROCESS_INFORMATION, start As STARTUPINFO
 
  start.cb = Len(start)
 
  ret& = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
 
  'Wait for the shelled application to finish:
  ret& = WaitForSingleObject(proc.hProcess, INFINITE)
  ret& = CloseHandle(proc.hProcess)
End Sub

Použití potom vypadá takto:

ExecCmd("C:\WINDOWS\solitaire.exe")
End


  Mam zasifrovanu databazu urobenu v MS Access97, ako urobit aby mi ju otvoril VB5, neviem kde mam napisat heslo.

Pokud používáte přímo kód, např. DAO, potom databázi otevřete tímto způsobem:

Dim dbMain As Database

Set dbMain=OpenDatabase("cesta",False, False,";pwd=heslo")

Pokud používáte prvek DataControl, který neumí otevřít databázi s heslem, musíte nejdříve otevřít databázi, v ní potom recordset a ten přiřadit prvku DataControl:

Dim dbmain As Database, qry As Recordset

Set dbmain = OpenDatabase(App.Path & "pokus.mdb", False, False, ";pwd=heslo")
Set qry = dbmain.OpenRecordset("pokus", dbOpenDynaset)
Set Data1.Recordset = qry


  Jak udělat ve formuláři, abych neměl osvětlené to X, kterým se formulář zavírá. Tím myslím aby X bylo Disabled.

Jediný způsob, který mě napadl, je smazat ze systémového menu položku Zavřít, tím se nastaví "X" na Disabled. V příkladu předpokládám menu Zavřít na šesté pozici. Pokud je menu jiné, musíte zvolit jiné číslo (parametr nPosition funkce DeleteMenu) nebo mazat menu podle názvu.

Private Declare Function GetSystemMenu Lib "user32" _
  (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" _
  (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

Private Const MF_BYPOSITION = &H400&

Private Sub Form_Load()
  Dim myMenu As Long

  myMenu = GetSystemMenu(Me.hwnd, 0)
  DeleteMenu myMenu, 6, MF_BYPOSITION
End Sub


Otázky bez odpovědi

  V MSDN je zmienka o použití interfacu k objektom Windows Exploreru na vloženie objektov (Listview, treeview, combo, taskbar atď ) do vlastných aplikácií, ale priložené vzory sú pre C++. Chcem Vás požiadať o nejaké moduly alebo príklady pre použitie týchto objektov, za čo Vám budem veľmi vďačný ! Zaujíma ma hlavne zobrazenie Listview, treeview, combo z exploreru a objekty z taskbaru (tabsysview, systraj objekt, objekt hodín a ponuky Štart pre vytvorenie nového typu taskbaru). Veľmi Vás prosím o pomoc.