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)
improvizovani toolbar
Zaključano
Zakačeno
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
Pozdrav
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.
Dugmici ne moraju da se zovu razlicito. Na primer, po Tag propertyju mozes da ih razlikujes.
Za sirinu texta pogledaj textWidth metod pictureboxa
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
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
Potpis
hvala na odgovoru, ali me interesuje kako da kada se dugmici "prenamnoze" predju u naredni red?
izmenjeno 1 put, poslednji put mladenovicz 14.01.2005. u 09:54
Izmene poruke
- mladenovicz14.01.2005. u 09:54zapis iz teksta poruke
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
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
[url]
http://www.Planet-Source-Code....p?txtCodeId=57102&lngWId=1
[/url]
Za dinamicne kontrole mogao bi ih ovdje upotrijebiti
http://www.Planet-Source-Code....p?txtCodeId=57102&lngWId=1
[/url]
Za dinamicne kontrole mogao bi ih ovdje upotrijebiti
Potpis
[ :. n!t .: ]
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
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
zanimljivo je to dinamičko dodavanje, ali kako dodati više od jednog dugmeta?
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
Citat:
Shadowed:
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]
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
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
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.
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.
sad znam kako da dodam dugme, ali kako da ga obrišem?
ako ih ucitavas sa load onda:
a ako sa set onda (pretpostavljam nisam nikad radio na taj nacin):
Code:
Unload cmdButton(Index)
Unload cmdButton(Index)
a ako sa set onda (pretpostavljam nisam nikad radio na taj nacin):
Code:
Set cmdButton(Index) = Nothing
Set cmdButton(Index) = Nothing