Avatar billede q^bone Nybegynder
24. februar 2005 - 15:05 Der er 19 kommentarer og
1 løsning

Runtime error '521' Can't open clipboard

Hey allesammen
Jeg sidder og roder med et chatprogram.
I mit chatprogram har jeg en funktion som rstatter :) med et lille gif billede.
Mit problem er egnetlig kun når jeg skal teste programmet. altså når jeg kører 2 "instances" af programmet på samme maskine.
Min kode kopierer billedet ind i clipboar og indsætter det derefter i chat vinduet. Men når jeg kører 2 versioner så når det første program ikke at frigive adgangen til clipboard før at det andet prøver at åbne clipboard.
Det jeg skal bruge er en "error-trap" som kommer op med en retry knap hvis fejl 521 optræder i programmet.
Jeg skal samtidig bruge en lille guide til hvor denne kode skal sætte ind.
Avatar billede q^bone Nybegynder
24. februar 2005 - 15:06 #1
Jeg er indtil videre kommet frem til hvordan jeg laver min popup besked men ved ikke lige hvad mere jeg skal gøre ved den? eller om den egnentlig er rigtig nok?

        strMsg = MsgBox("Clipboard er optaget! Prøv igen?", _
        vbRetryCancel + vbInformation, "Clipboard optaget")
Avatar billede q^bone Nybegynder
24. februar 2005 - 15:06 #2
Men hvis der er andre måder at løse problemet på end den der "error-trap" så er jeg åben for forslag :)
Avatar billede thesurfer Nybegynder
24. februar 2005 - 15:08 #3
Du bruger dette i toppen:

On Error Resume Next

Derefter kan du bruge:

If Err.Number = 521 then
        strMsg = MsgBox("Clipboard er optaget! Prøv igen?", _
        vbRetryCancel + vbInformation, "Clipboard optaget")
End if
Avatar billede thesurfer Nybegynder
24. februar 2005 - 15:09 #4
PS "i toppen" = i toppen af sub/function hvorfra du vil "error-trap'pe".
Avatar billede q^bone Nybegynder
24. februar 2005 - 15:20 #5
mener du at jeg i "toppen" indsætter:

On Error Resume Next

If Err.Number = 521 then
        strMsg = MsgBox("Clipboard er optaget! Prøv igen?", _
        vbRetryCancel + vbInformation, "Clipboard optaget")
End if

eller hvor mener du jeg skal indsætte:
If Err.Number = 521 then
        strMsg = MsgBox("Clipboard er optaget! Prøv igen?", _
        vbRetryCancel + vbInformation, "Clipboard optaget")
End if
?
Avatar billede thesurfer Nybegynder
24. februar 2005 - 15:26 #6
"On Error Resume Next" fortæller programmet, at den skal fortsætte ("Resume Next"), selvom der er fejl. Det skal bare stå i toppen af dine subs/functions.

Du kan også få den til at hoppe ned, til en speciel "Error Handler"-rutine:

On Error GoTo MinErrorHandler

' din almindelige kode her
' din almindelige kode her
' din almindelige kode her
' din almindelige kode her
' din almindelige kode her

exit sub ' eller exit function
MinErrorHandler:

If Err.Number = 521 then
' skriv noget og hop ud af sub/function
End if


--

Du kan også gøre sådan her:

On Error Resume next


' din almindelige kode her
' din almindelige kode her

If Err.Number = 521 then

' der er opstået en fejl, med koden 521,
' hvilket betyder at den IKKE skal udføre din kode

else

' udfør din kode

end if
Avatar billede thesurfer Nybegynder
24. februar 2005 - 15:41 #7
Hvad bruger du til at sætte billedet i clipboard?

Clipboard.SetData?

Eksempel:

On Error Resume Next

SaetData:
Clipboard.SetData <billedet her>


If Err.Number = 521 then

  strMsg = MsgBox("Clipboard er optaget! Prøv igen?", _
  vbRetryCancel + vbInformation, "Clipboard optaget")

  if strMsg = EnBestemtVærdi then Goto SaetData

End if

Linien "if strMsg = EnBestemtVærdi then Goto SaetData" tester værdien af strMsg, dvs, hvilken knap (Ja/Nej/OK/Cancel) der er trykket.. hvis den er Ja/OK, hopper den over til SaetData-label/etikette, og udfør ClipBoard-koden igen..

Jeg mener at "Ja" er kode 7.. ellers er det kode 6.. kan ikke lige huske det..
Og husker ikke lige om "then Goto SaetData"-delen er korrekt.
Avatar billede q^bone Nybegynder
24. februar 2005 - 16:06 #8
min kode er lidt lang.. da den looper gennenm flere smiley tegn:
-----------------------------------------------------------------------------
    For i = 0 To imgIcon.Count - 1
        CharCombo = Split(imgIcon(i).Tag, " ")
                                                   
        For iCC = 0 To UBound(CharCombo)

            lImagePos = InStr(lStartMessage, txtIn.Text, CharCombo(iCC))


            While lImagePos > 0
                txtIn.SelStart = lImagePos - 1
                txtIn.SelLength = Len(CharCombo(iCC))
                txtIn.SelText = ""
               
                Clipboard.Clear
                Clipboard.SetData imgIcon(i).Picture
                SendMessage txtIn.hWnd, WM_PASTE, 0, 0
               
                lImagePos = InStr(lImagePos, txtIn.Text, CharCombo(iCC))
            Wend
        Next iCC
    Next i
-----------------------------------------------------------------------------

Jeg har fået indsat det første det der on error resume next osv. Men den popper ikke op med en retry boks.
Tilgengæld laver den den fejl at hvis jeg skrive fra 1 vindue hele tiden så viser den kun hver anden smiley i det vindue ejg skriver fra.. hvor den viser alle smileys i den som modtager.. hvis du forstår?
Avatar billede q^bone Nybegynder
24. februar 2005 - 16:15 #9
hmm jeg tror at jeg mangler i den der "If error = 521", er at hvis der blvier svaret retry så skal den køre den der image ting igen
Avatar billede q^bone Nybegynder
24. februar 2005 - 16:24 #10
hm.. måske hvis jeg sætter det der ovenstående kode ind i en sub for sig og kalder den.. og så kalder den gen hvis der er problemer..
Avatar billede thesurfer Nybegynder
24. februar 2005 - 16:25 #11
Jeg går ud fra, at fejlen opstår i denne linie: Clipboard.SetData imgIcon(i).Picture
Hvis ja, skal du ha' din IF sætningen lige efter..

men hvordan mon man skal indsætte lablen/etikketen lige før...? :-)
Avatar billede thesurfer Nybegynder
24. februar 2005 - 16:26 #12
..lyder som en ide :-)
Avatar billede q^bone Nybegynder
24. februar 2005 - 16:38 #13
heh.. har lige et spørgsmål.. Hvordan sætter jeg den den kode ind i en sub? og hvordan kalder jeg den?

Skal den hedde f.eks.:

Function ReplaceImages()
eller
Sub ReplaceImages()
eller hvordan?

Og hvordan kalder jeg den?
bare ved at indsætte? Call ReplaceImages ?
Grunden til jeg spørger er fordi at jeg ikke helt kan få den til at lave smileys nu :(
Avatar billede thesurfer Nybegynder
24. februar 2005 - 16:50 #14
skriver lige noget kode..
Avatar billede thesurfer Nybegynder
24. februar 2005 - 16:55 #15
Prøv det her (det er IKKE testet!):

' din kode her... indtil:


                        While lImagePos > 0
                txtIn.SelStart = lImagePos - 1
                txtIn.SelLength = Len(CharCombo(iCC))
                txtIn.SelText = ""
               
                Clipboard.Clear
                Clipboard.SetData imgIcon(i).Picture
                if Err.Number = 512 then RepImg imgIcon(i).Picture
                SendMessage txtIn.hWnd, WM_PASTE, 0, 0
               
                lImagePos = InStr(lImagePos, txtIn.Text, CharCombo(iCC))
            Wend

' resten af din kode her..

' ny function:

Function RepImg(img)

SaetData:
' Hvis Err.Number hele tiden er 512, vil den blive ved med at loope..
' Jeg ved ikke om man kan "nulstille" Err.Number, men her er et forsøg:
Err.Number = 0 ' hvis dette giver fejl, kommenter/fjern linien.

strMsg = MsgBox("Clipboard er optaget! Prøv igen?", vbRetryCancel + vbInformation, "Clipboard optaget")
' 4 = retry, 2 = cancel
if strMsg = 4 then Clipboard.SetData img
if Err.Msg = 512 then GoTo SaetData

End Function
Avatar billede thesurfer Nybegynder
24. februar 2005 - 17:01 #16
Oops! Jeg skrev 512 i stede for 521! :-)
Ret det inden du tester :-)
Avatar billede q^bone Nybegynder
24. februar 2005 - 17:11 #17
hmm jeg er ikke helt med.. :(
er der ikke en eller anden måde hvor man kan poste hele sin kode?
Avatar billede thesurfer Nybegynder
24. februar 2005 - 17:13 #18
eh? Hvad er det du ikke forstår?

Det eneste "nye" er:

                Clipboard.SetData imgIcon(i).Picture
                if Err.Number = 521 then RepImg imgIcon(i).Picture

og en funktion

Hvilken del forstår du ikke?
Avatar billede q^bone Nybegynder
24. februar 2005 - 19:10 #19
hmm.. Du må undskylde at jeg ikke lige har svaret så hurtigt her til sidst.. har roddet en del med det.. og nu har jeg fået det til at virke..
:) Fik lidt hjælp udefra.. men læg lige et svar for noget en del af det du skrev kunne jeg bruge :)
Avatar billede thesurfer Nybegynder
26. februar 2005 - 01:15 #20
Så smider jeg bare et svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester