[ REDiceREDuction @ 12.01.2005. 21:47 ] @
hoću da od osnovnih objekata napravim nešto kao toolbar. To sam mislio da napravim tako što ću u picturebox stavljati button ali javio se problem: kako da se stvaraju u run-timeu novi dugmići (znam ono dim dugme as new button) ali kako da svako dugme ima različito ime i da se prilagodjava dužini teksta (captiona)
[ negyxo @ 13.01.2005. 09:39 ] @
E REDiceREDuction nemas srece. U VB-u neces moci da kreiras dugmad u run-time-u. Kod VB-a nema dinamicko kreiranje kontrola. Ono drugo bi bilo lako ali sta da radis kad ne moze prvo.

Pozdrav
[ mladenovicz @ 13.01.2005. 10:02 ] @
U picture box u design timeu stavis jedan command button i nazoves ga, na primer, cmdButton, stavis index property na 0, a Visible na false.

Code:

Private Sub cmdButton_Click(Index As Integer)
    Debug.Print cmdButton(Index).Tag
End Sub

Private Sub Command2_Click()
    Static Counter As Integer
    Counter = Counter + 1
    AddButton "Button" & Counter, "Button" & Counter
End Sub

Public Function AddButton(BtnCaption As String, BtnTag As String)
    Dim Ind As Integer
    
    Ind = cmdButton.ubound
    Load cmdButton(Ind + 1)
    cmdButton(Ind + 1).Move cmdButton(Ind).Left + cmdButton(Ind).Width + 30, cmdButton(Ind).Top
    cmdButton(Ind + 1).Tag = BtnTag
    cmdButton(Ind + 1).Caption = BtnCaption
    cmdButton(Ind + 1).Visible = True
End Function


Dugmici ne moraju da se zovu razlicito. Na primer, po Tag propertyju mozes da ih razlikujes.

Za sirinu texta pogledaj textWidth metod pictureboxa
[ REDiceREDuction @ 13.01.2005. 19:26 ] @
hvala na odgovoru, ali me interesuje kako da kada se dugmici "prenamnoze" predju u naredni red?
[ Shadowed @ 13.01.2005. 19:33 ] @
Code:

dim InRow as integer
inRow=10 'Ako ces npr. 10 u jednom redu
Public Function AddButton(BtnCaption As String, BtnTag As String)
    ...
    cmdButton(Ind + 1).Move cmdButton(Ind).Left + cmdButton(Ind).Width + 30, _
cmdButton(Ind).Top + Int(cmdButton.ubound / inRow)*cmdButton(Ind).Height + 30
     ...
End Function


Znaci, samo taj jedan red promenis a u inRow stavis koliko hoces da bude u jednom redu.
Mozda je malo lose formatiran kod jer nisam pisao u editoru vec direktno

[Ovu poruku je menjao mladenovicz dana 14.01.2005. u 09:54 GMT+1]
[ Pr[o_O]F @ 13.01.2005. 19:39 ] @
[url]
http://www.Planet-Source-Code....p?txtCodeId=57102&lngWId=1
[/url]
Za dinamicne kontrole mogao bi ih ovdje upotrijebiti
[ negyxo @ 14.01.2005. 13:11 ] @
Code:

Private WithEvents cmdDynamic As CommandButton

Private Sub Form_Load()
Set cmdDynamic = Controls.Add("VB.CommandButton", "Command1")

cmdDynamic.Caption = "Click Me"
cmdDynamic.Visible = True
End Sub


Zanimljivo
eto srece da je neko ranije postavio ovo pitanje




[ REDiceREDuction @ 14.01.2005. 22:10 ] @
zanimljivo je to dinamičko dodavanje, ali kako dodati više od jednog dugmeta?
Citat:
Shadowed
Code:

dim InRow as integer
inRow=10 'Ako ces npr. 10 u jednom redu
Public Function AddButton(BtnCaption As String, BtnTag As String)
    ...
    cmdButton(Ind + 1).Move cmdButton(Ind).Left + cmdButton(Ind).Width + 30, _
cmdButton(Ind).Top + Int(cmdButton.ubound / inRow)*cmdButton(Ind).Height + 30
     ...
End Function


Znaci, samo taj jedan red promenis a u inRow stavis koliko hoces da bude u jednom redu.
Mozda je malo lose formatiran kod jer nisam pisao u editoru vec direktno

[Ovu poruku je menjao mladenovicz dana 14.01.2005. u 09:54 GMT+1]

to baš i ne radi kod mene kako treba, a šta treba da radi:
-da višak dugmića u jednom redu prebaci u sledeći
-ne može tačno da se kaže koliko će dugmića biti u jednom redu jer to zavisi od dužine teksta (captiona) koji prikazuju, ali ako je dužina samo jedno slovo, dugme neće biti toliko tesno, već mora da postoji minimum duzine (width-a) od 1000 twipa
[ Shadowed @ 15.01.2005. 14:41 ] @
Da, da, vidim u cemu je greska, pretpostavljam da ti postavlja u drugom redu ali i dalje nadesko od poslednjeg...
Brzopletost... Na zalost sada nemam vremena da prepravim to.

Inace, inRow mozes da izracunas na osnovu sirine prethodnih tastera. Ako ti treba vise redova, onda moras da napravis niz inRow(MaxBrRedova) gde ti je svaki element niza broj tastera u jednom redu. Ako se i dinamicki menjju cirine rastera, onda se menja i njihov broj u redu pa ti je potrebna i neka Refresh f-ja itd. Sto vise stvari hoces da implementiras vise se komplikuje i usoznjava kod. Ovde imas par hintova pa pokusaj. Ako budem mogao kasnije mozda ti uradim nesto.
[ REDiceREDuction @ 27.01.2005. 19:38 ] @
sad znam kako da dodam dugme, ali kako da ga obrišem?
[ Aleksandar Ružičić @ 27.01.2005. 23:57 ] @
ako ih ucitavas sa load onda:
Code:

Unload cmdButton(Index)

a ako sa set onda (pretpostavljam nisam nikad radio na taj nacin):
Code:

Set cmdButton(Index) = Nothing