Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Leikepöytäongelma

Sivun loppuun

Milu [19.03.2008 18:13:04]

#

Mitä tarkoitaa ilmoitus vb6:ssa

Run-time error 521:
Can't open Clipboard

Ilmoitus tulee välillä kun koittaa liitää leikepöydältä tietoa textbox:iin.


Ohjelma kopioi toisesta ohjelmasta maalatun tekstin Keybd_event:llä näppäin painalluksilla(Ctrl+c)ja sitten kun sitä ylittää liittää (text1.text=Clipboard.getText) ajettavan ohjelman textbox:iin niin tulee tuo ilmoitus.

Ennen tuota leikepöydälle kopiointia leikepöytä on tyhjennetty(Clipboard.Clear)

neau33 [19.03.2008 22:07:16]

#

Heippa Milu!

testaa toimivuus oheisella koodilla...

Private Sub Command1_Click()
  Text1.Text = ""
  Clipboard.SetText (Text1.Text)
  Shell "notepad.exe", vbNormalFocus
  SendKeys "jotain tekstiä...^a^c", True
  AppActivate "Nimetön - Muistio"
  SendKeys "%{F4}" + "{TAB} "
  Text1.Text = Clipboard.GetText
End Sub

mikäli tökkii yhä tsekkaa jutskat seuraavasti:
Käynnistä -> Suorita - "sfc /scannow" - klikkaa OK

Visual Basic Runtime Errors

Milu [19.03.2008 23:02:18]

#

Tolla koodilla se vaan vilahtaa, kun kirjoittaa muistioon, mutta ei kirjoita text1.text:boxiin.

Nyt ei saa sit nauraa!!!

Eli tossa mun koodin on varmaan jotain muuta vikaa, kun sen pitäis klikata hiiren osoittimella toisesta ohjelmasta x ja y:llä määrättyä kohta(jolloin teksti tulee siniseksi) ja sit kopioida se leikepöydälle ja sit liittää se leikepöydältä omaan ohjelmaan text1.text boxsiin.

Se juttu on timerin alla ja tekee sitä muutaman kerran sekunnissa, toimii satunaisesti jonkun aikaa ja sit antaa ton virheilmoituksen.

En vaan keksinyt muuta keinoa homman toteutukseen kun ei tosta ohjelmoinnista hirveesti ole kokemusta.

Call SetCursorPos(x, y)
    Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&)
    Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&)

    Clipboard.Clear

    keybd_event VK_CONTROL, 0, 0, 0
    keybd_event VK_C, 0, 0, 0

    keybd_event VK_C, 0, KEYEVENTF_KEYUP, 0
    keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0

    DoEvents

    Text1.text = Clipboard.GetText

Edit:

Vai onko jotain muuta helppoa keinoa saada toisesta ohjelmasta "maalattuna" olevaa tekstitietoa kopioitua oman ohjelman muuttujaan, toi purkkaviritelmä toimii kun siihen laittaa on error virheen ohittavan toiminnon, mutta se ei aina kopio/liitä sitä tekstiä vaan jättää joskus tekemättä sen, vaikka se toisessa ohjelmassa näyttää olevan ns."maalattuna" tolla klikkaus systeemillä.
Tekeekö se liian nopeeta sitä vai mikä aiheuttaa ton virheilmoituksen.

neau33 [20.03.2008 00:20:28]

#

Heippa taas Milu!

virhe aiheutuu juuri siitä, että hommaa yritetään hoitaa aina välillä liian nopeasti eli Clipboard olioon yritetään viedä ja samanaikaisesti tuoda sieltä dataa...kokeile jarruttaa hieman...

'...
If Clipboard.GetData <> 0 Then Clipboard.Clear
'...koodisi jonka avulla kopioit tekstiä
'...toisesta ohjelmasta leikepöydälle
Dim TimerTag As Single
TimerTag = Timer + 0.25
jumpBack:
On Error Resume Next
Text1.Text = Clipboard.GetText
If Err > 0 Then
  Err.Clear
  If TimerTag > Timer Then Goto jumpBack
End If
On Error Goto 0
'....

Milu [20.03.2008 02:21:43]

#

Ok

Sain toimii kohtalaisen hyvin kun laittelin jarruja sinne väliin, täytyy vielä oikein ajankanssa perehtyä tuohon, että mitkä on sopivat pienet jarruajat.

Mut olis vielä sellainen kysymys, että onko mahdollisuutta saada sen leikepöydälle kopioidun tekstin väriä millään selville ennen sen liittämistä siihen text1.text boxsiin

neau33 [20.03.2008 07:03:48]

#

Heippa taas Milu!

kyllä onnistuu toi värijutska kunhan vääntää...
hae täältä mallia
sit oikeastaan voisit lisätä tutkinta-aikaa (TimerTag) viritelmähän päästää läpi heti jos tekstiä löytyy ja 0.25 sekunnin jälkeen oli leikepöydällä tekstiä tai ei...

Milu [20.03.2008 10:28:12]

#

kiitti Nea

Tarkennappas tota mulle "(TimerTag) viritelmähän päästää läpi heti jos tekstiä löytyy" nyt ei ihan saa ajatuksesta kiinni.

"On Error Resume Next" jatkaako tuo ohjelman suoritusta virheen jälkeiseltä riviltä vai miten toi tarkalleen toimii.

Newb [20.03.2008 14:41:15]

#

Milu kirjoitti:

"On Error Resume Next" jatkaako tuo ohjelman suoritusta virheen jälkeiseltä riviltä vai miten toi tarkalleen toimii.

Jep.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta