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řeboval bych vědět jestli jde (a pokud ano tak jak) k položce v prvku ListView nějak přidat místo ikony obrázek, např. JPG, BMP, atd.
 

Obrázek k položce v prvku ListView se přidává pomocí prvku ImageList takto:

  • Vyberte prvek ListView a v okně Propertis otevřete stránku vlastností kliknutím na položku Custom,
  • zvolte záložku ImageLists,
  • v seznamu vyberte jméno prvku ImageList, který bude reprezentovat obrázky pro zobrazení lvwIcon (položka Normal) a obrázky pro ostatní zobrazení (položka Small).

Přidáváte-li novou položku do ListView pomocí metody Add kolekce ListItems, můžete zadat jako jeden z parametrů i index ikony (v prvku ImageList). ImageList podporuje jak soubory ICO, tak BMP, JPG, GIF a další.


Pokud něco vykreslím do PictureBoxu (pomocí metody PSet), zmizí to, jakmile PictureBox překryji jiným oknem.
 
Pokud chcete aby zůstalo vše, co nakreslíte do PictureBoxu pomocí metod pro kreslení (např. Pset) vidět, musíte nastavit vlastnost AutoRedraw na hodnotu True. V opačném případě musíte vše při překrytí vykreslit znovu.


Vytvořil jsem projekt ActiveX EXE. Teď jej chci změnit na ActiveX DLL. Jak jej mohu zkonvertovat?
 
Projekt nemusíte nijak konvertovat, stačí pouze nastavit typ projektu. Spusťte dialog Project Properties (menu Project -> Properties) a v záložce General nastavte položku Project type.


V programu sčítám dvě čísla typu Integer a výsledek ukládám do proměnné typu Long. Vždy však vyskočí chyba. Kód vypadá takto:

Dim i As Integer, j As Integer, l As Long
i = 1000: j = 1000
l = i * j - tady vyskočí chyba

 

Stejnou chybu jsme zde již jednou probírali, protože se však na to samé ptáte často, ještě jednou zopakujeme. Problém je v tom, že proměnná i a j jsou typu Integer. Visual Basic tedy vytváří výsledek typu Integer a až poté jej převádí na typ Long (proměnná l). Samozřejmě vyskočí chyba, protože výsledek 1000 * 1000 přesahuje možnosti typu Integer. Aby kód fungoval tak jak chcete, musíte nejdříve jednotlivé proměnné převést na typ Long:

Dim i As Integer, j As Integer, l As Long
i = 1000: j = 1000
l = Clng(i) * Clng(j)


Když otevřu nový nový projekt, cesta k němu je nastavena na C:\Program Files\Microsoft Visual Studio\VB98. Ja však chci, aby byla standardní cesta jiná.
 
Visual Basic neumožňuje nastavit standardní cestu k projektům. Jediná možnost je vytvořit si zástupce na Visual Basic a v jeho vlastnostech nastavit položku "Kde začít" na vámi žádanou cestu.


Jak mohu vypnout jinou aplikaci? Zkoušel jsem funkci API DestroyWindow, ta však nefunguje (handle okna zjišťuji pomocí FindWindow).
 
Pokud se snažíte vypnout jinou aplikaci, použijte raději funkci API SendMessage se zprávou WM_CLOSE. DestroyWindow neumožňuje zrušit okno vytvořené jiným vláknem.


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?


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