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
Na ChipCD 3.2000 je příklad na přehrávání zvuku přes DirectX a tak se chci zeptat, jestli
na nějakém minulém CD nebylo něco o DirectDraw a případně jestli o tom bude něco v příštích
číslech.
DirectX se bohužel nevěnujeme, příklady o DirectX jsou výhradně z Internetu nebo pokud
je zašle nějaký čtenář. Proto nemůžeme přesně říci, zda ještě nějaké budou. Pár příkladů na
použití DirectDraw bylo na Chip CD 7/1999. Na Internetu můžete nalézt informace a zdrojové
kódy týkající se DirectX např. na adresách www.chez.com/scribe a
msdn.microsoft.com/directx. Spousta odkazů
na další servery je na www.vb-web-directory.com/game/gam_dx.shtml
Mohli byste mi prosím vysvětlit, jak se vytvářejí formuláře, tzv. splash screen, tedy formuláře,
které se objeví na obrazovce, dokud se samotný program teprve inicializuje.
Vytvářějí se úplně normálně, jako ostatní formuláře. Většinou však nemají titulkový pruh. To
způsobí nastavení vlastností BorderStyle = 3, Caption = "", ClipControls = False,
ControlBox = False. Zobrazení samotného formuláře potom bývá mezi prvními instrukcemi
programu a po provedení všech inicializací programu se formulář zase schová. Např.:
Private Sub Main()
frmSplash.Show
DoEvents
If App.Previnstance ... 'nějaké kontroly před spuštěním, otevření DB apod.
If GetSettings( ...
otevriDatabazi(cesta) ...
...
Load frmMain
Unload frmSplash
frmMain.Show 'hlavní formulář aplikace
End Sub
Pomocí API funkce InsertMenu si mohu do menu okna přidat co chci (např. "vždy
na vrchu"), ale vůbec nevím, jak zajistit, aby se při kliknutí na toto menu něco
provedlo.
Při přidávání menu získáte jeho ID (čtvrtý parametr funkce InsertMenu). Pomocí
funkce SetWindowsLong nastavíte vlastní funkci pro obsluhu zpráv (řečeno zjednodušeně)
a v ní rozpoznáte (pomocí zmíněného ID), zda někdo zvolil přidanou položku v menu, kontrolou parametrů message
a wparam. Např.:
'====================== kód formuláře ======================
Private Sub Form_Load()
insertmymenu
End Sub
Private Sub Form_Unload(cancel As Boolean)
unloadmymenu
End Sub
'====================== kód modulu =========================
Private lngID As Long
Private lngOldProcessID As Long
Public Sub insertmymenu()
Dim hWndSystemMenu As Long
hWndSystemMenu = GetSystemMenu(frmMenuSample.hwnd, 0&) 'získej ID systémového menu
InsertMenu hWndSystemMenu, 0, MF_STRING, mlngID, "moje menu" 'vlož položku menu
'nastav novou funkci pro obsluhu zpráv
lngOldProcessID = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf SystemMenuCallBack)
End Sub
Public Sub unloadmymenu()
'Nastav původní obsluhu zpráv
SetWindowLong Form1.hwnd, GWL_WNDPROC, lngOldProcessID
End Sub
Public Function SystemMenuCallBack(ByVal lnghwnd As Long, ByVal lngMessage _
As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If lngMessage = WM_SYSCOMMAND Then 'bylo kliknuto na syst. menu
Select Case wParam 'která položka to byla
Case lngID
msgbox "Moje menu"
Exit Function
Case Else
End Select
End If
SystemMenuCallBack =CallWindowProc(lngOldProcessID, lnghwnd, lngMessage, wParam, lParam)
End Function
Chtěl bych naprogramovat aplikaci, která by pomocí modemu zpřístupnila na jiném počítači
aplikaci s databází. Problém je v tom, že nevím, jak udělat, aby ta druhá aplikace
zdvihla telefon a začala komunikovat. Je vůbec možné něco takového vytvořit pomocí Visual Basicu?
Takováto akce ve Visual Basicu udělat jde. Pomocí komponenty MSComm můžete vysílat
i přijímat data ze seriového portu, tzn. i AT příkazy pro modem, který je na tomto
portu připojen a těmi si můžete modem ovládat, jak chcete.
Mám dva problémy ve VB5. Nejde mi vyrobit ChooseFont dialog s použitím pouze API funkcí. Při
volání mi GetLastError vrátí chybu CDERR_STRUCTSIZE. Chtěl bych používat systémová okna pro
FindText a ReplaceText (opět API). Okna se mi zobrazí, ale pokud zvolím cokoliv jiného než
Storno, VB se zhroutí.
Pravděpodobně je problém buď v definici struktury nebo není nastaveno, které fonty se mají
zobrazit, pro tiskárnu, obrazovku nebo obojí. Zkuste strukturu naplnit takto:
cf.lStructSize = Len(cf)
cf.hwndOwner = Form1.hWnd
cf.hDC = Printer.hDC
cf.Flags = CF_BOTH Or CF_EFFECTS Or CF_FORCEFONTEXIST Or CF_INITTOLOGFONTSTRUCT Or CF_LIMITSIZE
cf.nFontType = REGULAR_FONTTYPE
cf.nSizeMin = 10
cf.nSizeMax = 72
Pokud jde o druhý problém s dialogy pro vyhledávání a nahrazení textu, netuším proč to dělá
(kdo víte jak na to, napište).
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.
Rád by som získal informácie o API funkciách pre prácu s resources, spôsob ich volania
vo VB a informácie potrebné pre správny chod funkcie:
loadresource, findresorce, freeresource, updateresource. Chcel by som urobiť malý
lokalizátor, a na to sú potrebné tieto funkcie, v angličtine (MSDN) som čosi porozumel,
ale neviem ako loadnuté resource zobraziť v Image, txt objekte, a ako ich updatovať do
súboru.
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í.
|