Onko mahdollista kirjoittaa ajon aikana tekstiä formille?
Esimerkiksi jos ohjelma tulostaa kuvaajan lomakkeelle, niin voisiko siihen täydentää tietoja sen jälkeen..
Print käskyllä voi kirjottaa koskavaan formille, mutta teksti ei näy objektien alta eli jos kuvaaja on joku muu kuin formille tulostettu kuva niin tekstiä ei näy. Paras tapa on laitella formiin label objecteja ja sitten muuttaa niiden tekstiä koodista käsin.
ESIM:
Label1.Caption = "Moikka"
Tekstiä voi tosiaan kirjoittaa Print-metodilla, ja tekstin paikan pystyy päättämään CurrentX- ja CurrentY-ominaisuuksien avulla. Lisätietoa on VB-oppaassa.
Helpompi tapa on käyttää GDI:tä (tai GDI+:aa jos käyttää VB.NET:ia).
Tarkoitin lähinnä olisiko mahdollista lisätä tietoja sen jälkeen, kun kuvaaja on piirtynyt formille. Eli aluksi kuvaaja on piirtynyt formille line, circle ja muilla vastaavilla käskyillä. Sen jälkeen voisi napsauttaa hiirtä tietyssä kohdassa, johon haluaisi tietoja lisättävän. Olisiko tällainen mahdollista ja jos niin miten??
kun hiirtä naksautetaan muutetaan CurrentX ja CurrentY vastaaviksi.
Form1.CurrentX=Mouse.x Form1.CurrentY=Mouse.y Form1.Print InputBox("Teksti joka lisätään...")
VB taidot vähän ruostunu mutta tossa ainakin periaatteessa tehtynä se
Nyt toimii. Kiitoksia paljon!
Tuli lisää ongelmia. Eli, kun on tolla InputBoxilla lisännyt tekstiä, ni voikos sen sitten jotenkin poistaa..? Esim yritän tehdä toimintoa, jossa hiiren vasemmasta napista lomakkeen päällä painamalla saa lisättyä tietoa haluamaansa paikkaan ja oikeasta napista pitäisi saada poistettua lisätty teksti..
Tuo ei onnistukaan enää niin helposti. Print on täyttä grafiikkaa, joten sen voi pyyhkiä vain yksinkertaisesti piirtämällä päälle taustan väriä. Joutuisit tuota varten käytännössä luomaan jonkinlaisen oman "kontrollin", jonka tiedot olisivat taulukoissa. Suosittelen kyllä käyttämään esim. labeleita tuollaiseen, jos em. tapa tuntuu vaikealta.
Moi mara!
Vastaus sun ongelmaan...
mara kirjoitti:
Tuli lisää ongelmia. Eli, kun on tolla InputBoxilla lisännyt tekstiä, ni voikos sen sitten jotenkin poistaa..? Esim yritän tehdä toimintoa, jossa hiiren vasemmasta napista lomakkeen päällä painamalla saa lisättyä tietoa haluamaansa paikkaan ja oikeasta napista pitäisi saada poistettua lisätty teksti..
Ensteks aseta Formin properties asetuksissa AutoRedraw arvoksi True ja FontTransparent arvoksi False
'moduuliin Global TagX As Integer, TagY As Integer, xLen As Integer 'formiin Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Button Teksti$ = "teksti": xLen = Len(Teksti$) Case 1 If Not X = TagX Or Not Y = TagY Then Me.CurrentX = TagX Me.CurrentY = TagY Me.ForeColor = Me.BackColor: Me.Print String$(xLen, Chr$(219)) End If Me.ForeColor = &H80000008 Me.CurrentX = X: TagX = X Me.CurrentY = Y: TagY = Y Me.Print "texti" Case 2 If Not X = TagX Or Not Y = TagY Then Me.CurrentX = TagX Me.CurrentY = TagY Me.ForeColor = Me.BackColor: Me.Print String$(xLen, Chr$(219)) End If Me.CurrentX = X Me.CurrentY = Y Me.ForeColor = Me.BackColor: Me.Print String$(xLen, Chr$(219)) End Select End Sub
Oops!...pikku korjaus edelliseen
'moduuliin Global TagX As Single, TagY As Single, xLen As Integer 'formiin Private Sub Form_Load() Me.AutoRedraw = True Me.FontTransparent = False End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Teksti$ = "teksti": xLen = Len(Teksti$) Select Case Button Case 1 If Not X = TagX Or Not Y = TagY Then Me.CurrentX = TagX Me.CurrentY = TagY Me.ForeColor = Me.BackColor: Me.Print String$(xLen, Chr$(219)) End If Me.ForeColor = &H80000008 Me.CurrentX = X: TagX = X Me.CurrentY = Y: TagY = Y Me.Print Teksti$ Case 2 If Not X = TagX Or Not Y = TagY Then Me.CurrentX = TagX Me.CurrentY = TagY Me.ForeColor = Me.BackColor: Me.Print String$(xLen, Chr$(219)) End If Me.CurrentX = X Me.CurrentY = Y Me.ForeColor = Me.BackColor: Me.Print String$(xLen, Chr$(219)) End Select End Sub
Kiitoksia Nea. Tuota pystyi hyvin soveltamaan, vaikken ihan täsmälleen tuota tarkoittanutkaan!
Aihe on jo aika vanha, joten et voi enää vastata siihen.