V této rubtice najdete odpovědi na nejčastější otázky ohledně programování ve Visual Basicu. Jsou zde i odkazy na podsekci download, protože k některým odpovědím je přiložen příslušný soubor např. ikony,...


Seřazení položek ListBoxu podle velikosti

Function Seřaď(xListBox As ListBox)
Dim MeziVýpočet As Integer
Dim Největší As Integer
Dim xSeznam As String
Dim Položka() As String
Dim počet As Integer

    počet = xListBox.ListCount
    For i = 0 To xListBox.ListCount - 1
        MeziVýpočet = 0
        For i1 = 0 To xListBox.ListCount - 1
            If Len(xListBox.List(i1)) > MeziVýpočet Then
                MeziVýpočet = Len(xListBox.List(i1))
                Největší = i1
            End If
        Next
        xSeznam  = xSeznam  & ";" & xListBox.List(Největší)
        xListBox.RemoveItem Největší
    Next
    Položka() = Split(xSeznam , ";")

    For i = 1 To počet
        xListBox.AddItem Položka(i)
    Next
End Function

Nahoru


Vložení obsahu schránky do RichTextBoxu

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_PASTE = &H302

SendMessage RichTextBox1.hwnd, WM_PASTE, 0, 0

Nahoru


Nezavíratelný formulář

Private Sub Form_Unload(Cancel As Integer)
    Cancel = True
End Sub

Nahoru


Skrytí/zobrazení kurzoru myši

Jde to jednoduše pomocí API fce ShowCursor:

Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long 'Tímto deklarujete API fci

ShowCursor False ' Skryje kurzor myši

ShowCursor True ' Zobrazí kurzor myši

Nahoru


Nalezení řetězce v TextBoxu

Je to velice jednoduché:

Function Nalézt(Odkud As TextBox, Co as String)
Dim i As Integer, Nalezeno as Boolean
    For i = 1 To Len(Odkud.Text)
        If Mid(Odkud.Text, i, Len(Co)) = Co Then
            Nalezeno = True
        End If
    Next
End Function

Nahoru


Jsem On - line?

Na zjištění stavu připojení existuje ve VB speciální proměnná IsConnected. Kód je velmi jednoduchý:

If IsConnected = True Then
    MsgBox "Jste připojen"
Else
    MsgBox "Nejste připojen"
End If

Nahoru


Zjištění vzájemné pozice dvou objektů

V následujících ukázkách je podrobně popsáno jak se dá jednoduše zjistit vzájemná pozice dvou objektů (zda se překrývají, dotýkají, ...)

Stáhnout: Prace_s_objekty.zip (2,8 kB)
Stáhnout: Prace_s_objekty2.zip (2,1 kB)

Autor: mindmaster, přidáno 14.12.02

Nahoru


Uložení uživatelského nastavení

Jsou dvě možnosti jak to udělat: ukládání nastavení do .ini souborů (starší způsob, rychlejší načítání - např. pomocí Wolf´s INI - rubrika Download) a nebo ukládáním do registrů (pomocí příkazů SaveSetting - zapsání do registru, GetSetting - čtení z registru a DeleteSetting - odstranění nastavení registru)

V následující aplikci je jednoduše posáno kterak zapsat nastavení několika objektů do registru, následně je z registru přečíst a taky jak registr odstranit.

Stáhnout: Registry.zip (1,93 kB)

Autor: mindmaster, přidáno 21.9.02

Nahoru


Použití barev

Určitě jste se v nějaké Vaší aplikaci  setkali s potřebou definovat barvu nějakého objektu v kódu. K tomu potřebujete vědět jak se tyto barvy tvoří. Jsou 3 možnosti jak do kódu zapsat barvu: 

1)Pomocí funkce QBColor (QuickBasicColor), která obsahuje 16 základních barev - např. vbRed(červená), vbGreen(zelená),.. nebo se dá definovat takto: QBColor(color), kde color je celé číslo od 0 do 15

Číslo(color)

Barva

0 černá
1 modrá
2 zelená
3 azurová 
4 červená
5 purpurová
6 žlutá
7 bílá
8 šedá
9 světle modrá
10 světle zelená
11 světle azurová
12 světle červená
13 světle purpurová
14 světle žlutá
15 jasně bílá

 2)pomocí funkce RGB (RedGreenBlue): do každé ze tří primárních barev (Red=červená, Green=zelená, Blue=modrá) se přiřadí číslo od 0 do 255 (toto číslo určuje intenzitu jednotlivé barvy)

Syntaxe vypadá takto:

frmMain.BackColor = RGB(Red as Integer, Green as Integer, Blue as Integer)

3)Použití hexadecimálního kódu (přímé nastavení barvy): syntaxe je taková: &HBBGGRR& (BB intenzita modré, GG intenzita zelené, RR intenzita červené - každá z těchto částí je reprezentována dvoumístným hexadecimálním číslem od 00 do FF (střední hodnota je 80)

V následující aplikci jsou všechny tři způsoby ukázány v praxi.

Stáhnout: Barvy.zip (1,32 kB)

Autor: mindmaster, přidáno 21.9.02

Nahoru


Převod proměnných

Pokud potřebujete převést jeden typ proměnné na druhý musíte znát tzn. převodní funkce:

POZOR: Převáděné hodnoty musí mít platný rozsah výsledného datové typu (např. když převádíme typ Double na Single, číslo, které převádíme musí být v rozsahu typu Single).

Boolean (true/false) Cbool
Byte (binární data)  Cbyte
Currency (měna)  Ccur
Date (čas/datum) Cdate
Double (desetinné číslo v dvojité přesnosti) . . . Cdbl CDbl
Error (chyby) CVErr
Integer (celé číslo) Cint
Long (dlouhé celé číslo) Cbool
Single (desetinné číslo v jednoduché přesnosti  Csng
String (řetězec)  Cstr
Variant Cvar

Příklad kódu:

Private Sub Command1_Click()
    CelkovaCena = CCur(PocetLidi *         CenaVstupenky)
End Sub

Autor: mindmaster, přidáno 19.11.02

Nahoru


Rozlišení pravého a levého tlačítka myši

Tlačítka u myši se dají rozlišovat v události MouseDown nabo MouseUp (častější je MouseUp). Chceme například aby se při u události MouseUp obrázku Image1 při stisku levého tlačítka ukončil běh aplikace, stisknutím pravého tlačítka zobrazila místní nabídka mnuHlavní a při stisku prostředního nabídka mnuUpravy.

V kódu znamená "Button = 1" levé tlačítko, "Button = 2" pravé tlačítko, "Button = 3 prostřední tlačítko".

Kód bude následující:

Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
        End
    Else
    If Button = 2 Then
        PopupMenu mnuHlavní
    Else
        PopupMenu mnuUpravy
    End If
End Sub

Poznámka:Existují i kombinace stisknutí tlačítek naráz (např levé i pravé najednou):

V kódu

Význam

Button = 0 žádné tl.
Button = 1 levé tl.
Button = 2 pravé tl.
Button = 3 levé + pravé tl.
Button = 4 prostřední tl.
Button = 5 levé + prostřední tl.
Button = 6 pravé +prostřední tl.
Button = 7 všechny 3 tl.

 

Autor: mindmaster, přidáno 19.11.02

Nahoru


Jak rozliším jednotlivé záložky v TabStripu?

Tab strip není kontejner pro další objekty, ale pouze slouží téměř jako pozadí. Kliknutím na záložku budeme měnit pouze vlastnost visible objektů vložených na formulář. Vložíme si na formulář 4 Framy (rámečky) a chceme aby se na první záložce zobrazily první dva rámečky a na druhé záložce třetí a čtvrtý rámeček (do rámečků, který narozdíl od TabStripu slouží jako kontejner se dají vložit další prvky a stačí napsat kód pro rámeček a tento kód bude platit i pro prvky do rámečku vložené).Na začátku nastavíme vlastnost visible u Frame1,2 na True a u Frame2,3 na False

Kód je tento:

Private Sub TabStrip1_Click()
    If TabStrip1.SelectedItem.Index = 1 Then
        Frame1.Visible = True
        Frame2.Visible = True
        Frame3.Visible = False
        Frame4.Visible = False
    End If
    If TabStrip1.SelectedItem.Index = 2 Then
        Frame3.Visible = True
        Frame4.Visible = True
        Frame1.Visible = False
        Frame2.Visible = False
    End If
End Sub

Autor: mindmaster, přidáno 26.8.02

Nahoru


Jak zobrazím "pacičku" při najetí na Label?

Stáhněte si tuto ikonu z podsekce Download ,nabídka bude obsahovat pouze typ .bmp ale do Vašeho počítače se uloží jako .ico (je nutné aby byla ve formátu .ico, protože VB může zobrazit ja kurzor myši pouze formát .ico nebo .cur). V Properties (vlastnostech) Labelu nastavte vlastnost MouseIcon na tuto ikonu a vlastnost MousePointer na 99-Custom.

Autor: mindmaster, přidáno 25.8.02

Nahoru

Jak udělám z Labelu odkaz na e-mail nebo na www?

Kód na e-mail:

Private Sub Label1_Click()
    Shell "start mailto:vbuilder@seznam.cz?subject = cokoli = zpráva&cc = kopie @seznam.cz"
End Sub

Kód na www:

Private Sub Label1_Click()
    Shell ("start http://vbuilder.webz.cz")
End Sub

Autor: mindmaster, přidáno 20.8.02

Nahoru


Jak zobrazím obrázek na tlačítko v ToolBaru?

Na formulář si vložte prvek ImageList (není ve standartní nabídce ale vložíte ho následovně: klikněte pravým tl.myši na lištu s ovládacími prvky a klepněte na Components a zaškrtněte Microsoft Windows Common Controls 6.0 nebo 5.0)- do něj vložte obrázky(v jeho valstnostech insert picture) a ToolBar, který vložíte zároveň s ImageListem. V Properties ToolBaru nastavte vlastnost ImageList na ten váš vložený (nejspíš ImageList1) a v záložce Buttons vložte tlačítka. Výsledného efektu docílíte tak, že ve vlastnost Image nastavíte na index obrázku v ImageListu.

Autor: mindmaster, přidáno 18.8.02

Nahoru

Prodloužení intervalu v Timeru.

Jak je napsáno v mém prvním příspěvku může mít Timer vlastnost Interval pouze 65 535 milisekund. Interval si nastavíme na 1 vteřinu což je 1000 milisekund. Abychom prodloužili interval třeba na 10 vteřin (10 vteřin lze nastavit rovnou, ale abychom si tuto funkci mohli ověřit nebudeme nastavovat velké hodnoty) musíme si nejdříve vytvořit proměnnou, kterou nazveme např.cas. Abychom zajistili zvětšování proměnné do kódu napíšeme cas = cas + 1 a až se zvětší proměnná na 10 (což je 10 vteřin) zobrazí se MsgBox. Abychom zajistili že se tato procedura bude opakovat musíme do kódu napsat cas = 0 (tím zajistíme že hodnota proměnné se bude opět zvětšovat až do deseti vteřin, kdybychom to neudělali MsgBox by se zobrazil jen po prvních 10 vteřinách)

Kód je tento:

Private Sub Timer1_Timer()
Static cas As Integer
    cas = cas + 1
    If cas = 10 Then
        MsgBox "uběhla hodina"
        cas = 0
    End If
End Sub

Autor: mindmaster, přidáno 18.8.02

Nahoru

Co je Visual Basic?

Visual Basic (později VB) je vizuální programovací jazyk který už vyšel v sedmi verzích*, každou verzi si můžete zakoupit ve třech edicích: Learning Edition (pro amatérské programování nepodporuje většinu prvků ActiveX), Professional Edition a Enterprise Edition (poslední dvě edice podporují všechny prvky ActiveX a spolu s  průvodci vytvářením aplikace mohou tyto prvky vytvářet,). Prvních pět verzí bylo nazváno VB1.0 - VB6.0, poslední verze je nazvaná VB.net a je určena pro tvorbu internetových aplikací. K edicím Professional a Enterpise jsou také přiloženy další programy jako je například MS Visual C++, MS Visual FoxPro nebo MS Visual InterDev. Všechny verze byly vytvořeny firmou Microsoft.

Systémové požadavky: procesor 486/66 MHz, Windows95 a vyšší nebo Windows NT 4.0 nebo vyšší, 16 MB RAM pro Windows9x a 24 MB RAM pro Windows NT, Volné místo na HDD: v závislosti na edici, myš

Součástí balení VB je knihovna MSDN (pouze v anglickém jazyce), která slouží jako nápověda.

*všechny verze i edice jsou v anglickém jazyce

 

Základní ovládací prvky, které jsou ve všech edicích:

PictureBox (pole s obrázkem) - slouží jako visuální kontejner pro ostatní prvky, zobrazuje soubory JPEG, GIF, bitové mapy, ikony

Label (popisek) - zobrazuje text, který uživatel nemůže měnit

TextBox (textové pole) - pokud není vlastnos Lock zaškrtnuta na True (tím bude textové pole nepřístupné pro zadání textu) slouží pro zobrazení nebo zadání textu

Frame (rámeček) - slouží jako vizuální a funkční kontejner pro další ovládací prvky)

CommandButton (příkazové tlačítko) - po stisknutí provede příkaz nebo akci

CheckBox (zaškrtávací políčko) - jeho vlastnost True/False určuje jestli je/není zaškrtnuté, je možno zaškrtnout libovolný počet těchto políček současně

OptionButton (přepínač) - zobrzuje skupinu voleb z nichž jen jedna může mít hodnotu True

ComboBox (pole se seznamem) - umožňuje vybrat nebo napsat požadovanou položku

ListBox (seznam) - zobrazí seznam položek, z kterých uživatel může vybírat

HScrollBar (vodorovný posuvník) - přidá posuvník k prvkům, které je nemají automaticky

VScrollBar (svislý posuvník) - přidá posuvník k prvkům, které je nemají automaticky

Timer (časovač) - provádí akci v časových intervalech (vlastnost Interval je v milisekundách a může mít hodnotu 0 až 65 535 což je něco přes jednu minutu)

DriveListBox (pole se seznamem diskových jednotek) - zobrazí diskové jednotky v počítači uživatele

DirListBox (pole se seznamem adresářů/složek) - zobrazí adresáře a cesty a tím umožní uživateli výběr, tento ovládací prvek navazuje na prvek DriveListBox

FileListBox (pole se seznamem souborů) - zobrazí seznam souborů a tím umožní uživateli výběr, tento ovládací prvek navazuje na prvek DriveListBox a DirListBox

Shape (tvar) - přidá elipsu, čtverec, obdélník, kruh

Line (čára) - přidá rovnou čáru

Image (obrázek) - zobrazuje soubory JPEG, GIF, bitové mapy, ikony, po stisknutí slouží jako příkazové tlačítko

Data (data) - umožňuje připojit se již k existující databázi zobrazit z ní informace na formulář

OLE (kontejner OLE) - vloží data do aplikace

 

Základní vlastnosti které má většina výše uvedených prvků:

Visible (viditelnost) - hodnoty True/False určují zda je/není daný ovládací prvek pro uživatele viditelný

Caption (legenda) - zobrazuje text v titulku

Text (text) - vlastnost která zobrazuje text na prvcích kde je to možné

Enabled (přístupnost) - hodnoty True/False určují zda je daný prvek pro uživatele dostupný tj. zda ho může nějakým způsobem ovlivnit

BackColor (barva pozadí) - určuje barvu kterou bude mít daný ovládací prvek

ForeColor (barva písma) - pokud je v ovládacím prvku zobrazen text, barvu písma můžete měnit touto vlastností

Font (font písma) - touto vlastností se nastavuje valikost, řez a typ písma

BorderStyle (styl okrajů) - určuje zda má byt objekt např. 3D nebo splývat s formulářem

 

Pokud se chcete věnovat podrobněji ovládacím prvkům a jejich vlastnostem napište mi a já zveřejním k tomuto tématu více informací. Nyní je taky možnost stáhnout si můj program VBuilder`s object library CZ 1.0, která popisuje všechny výše uvedené ovl. prvky + všechny jejich funkce.

Autor: mindmaster, přidáno 17.8.02

Nahoru