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

  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.

Odpovídá Jan Zajíc ml.

Pípnutí "speakera" je možné pomocí knihovny port.dll (mohu zaslat, ale nevím, jak je to s autorskými právy).

Pípnutí.

For i = 1 To 100
  OUTPORT 97, (INPORT(97) Or 2)
  For y = 1 To 10000 : Next y
  OUTPORT 97, (INPORT(97) And 253)
  For y = 1 to 10000 : Next y
Next i

Tyto příkazy způsobí vytvoření obdélníkového průběhu napětí na výstupu speakeru. Tedy 100 se nahodí a shodí. Aby byl na PC s procesorem 200MHz slyšet tón, musí se zavést dostatečné čekací doby. Ty jsou tvořeny čítacímy smyčkami do 100 000. Přesná výška je závislá na použitém PC. Ovšem sčítací smyčky nejsou zrovna vhodné, následující příklad již vyrobí lepší zvuk.

For i = 1 To 100
  OUTPORT 97, (INPORT(97) Or 2)
  DELAY 1
  OUTPORT 97, (INPORT(97) And 253)
  DELAY 1
Next i

Dále je důležité si deklarovat tyto funkce:

Declare Sub OUTPORT Lib "port.dll" (ByVal Adr As Integer, ByVal Dat As Integer)
Declare Function INPORT Lib "port.dll" (ByVal Adr As Integer) As Integer
Declare Sub DELAY Lib "port.dll" (ByVal Cas As Integer)

 

  Jak se dá přepínat klávesnice? Např. z anglické do české a nazpět.

Přikládáme příklad, který nám zaslal jeden ze čtenářů.


  Je ve VB možné aby se program spustil přes celou obrazovku, jako např. většina her?
  

Pokud chcete zobrazit formulář přes celou obrazovku, můžete buď použít rozhraní DirectX, nebo nastavte formuláři vlastnost WindowState na Maximized (2) a BorderStyle na None (0). V takovém případě bude formulář přes celou obrazovku. Pokud vám vadí taskbar, který bude samozřejmě vidět, můžete jej schovat pomocí funkce API SetWindowPos.

Dim hw As Long

hw = FindWindow("Shell_traywnd", "")
SetWindowPos hw, 0, 0, 0, 0, 0, SWP_HIDEWINDOW

Otázky bez odpovědi

  Potřeboval bych pomocí funkce API vyvolat dialog "Najít". Slyšel jsem, že je to přesně funkce Findtext. Její deklaraci jsem si našel v programu API Text Viewer včetně typu FINDREPLACE.

  Neexistuje nějaký OCX, nebo DLL knihovna, která by umožňovala odesílání krátkých textových zpráv rovnou z PC přes modem?

  Našel jsem v API vieweru funkci SetWindowsHook, ale jaksi ji neumím použít. Můžete mi prosím napsat jednoduchý návod s příkladem?

  Jak lze přijímat/posílat data na některý z portů ve Windows 2000?

  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.

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