QL.túra

Kulturális smörgåsbord Esterházytól Wass Albertig, a gumicsizmától az iPad-ig, a Teletabiktól Sexpírig, a makrofágtól a mikrokontrollerig, miazmás...

Címkék

2000 (20) 2001 (6) 2002 (16) 2003 (164) 2004 (61) 2005 (40) 2006 (31) 2007 (28) 2008 (33) 2009 (175) 2010 (188) 2011 (201) 2012 (86) 2013 (40) 2014 (36) 2015 (26) 2016 (10) adáshiba (91) android (1) animáció (93) cygwin (3) film (410) gezarol (13) hájtek (159) hangoskönyv (32) ipad (17) klip (12) könyv (191) linux (29) színház (169) vers (17) windows (37) zene (111) Címkefelhő

+jegyzések

Most ...

... múlok .osan

bmi_tiny.png


... hallgatom
Szabó Magda: Régimódi történet
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqTmZEqlCRFgojyt52Q2n_qiMTyVlt-zJu-DpbNKVY6OQbBh4u


... olvasom
Alexander Steele (szerk.): Kezdő írók kézikönyve


... (Kik ezek? Kik ezek az embek? Kik ezek?)
profile for TrueY on Stack Exchange, a network of free, community-driven Q&A sites
free counters

[Hajtek] Visual Studio-ban clipboard-ra másolás (windows)

2013.03.26. 11:00 | TrueY | Szólj hozzá!

Címkék: hájtek 2013

Fejlesztés alatt többször is előfordult, hogy Visual Studio-ban ki kell másolnom az éppen szerkesztett file nevét, a sor számát, a függvény, osztály metódus nevét. El is jutottam a megoldásig, ahol is a beformázott szöveget a makróból ki kellett volna másolnom a vágólapra. De erre egy exception-t kaptam:

"Current thread must be set to singe threat apartment (STA) mode before OLE calls can be made. Ensure that your main function has STAThreatAttribute marked on it."

Próbálkoztam attribútumok beállításával, de nem működött. Végül találtam egy oldalt, ahol volt megoldás a problémámra. Lényegében elindít egy thread-et, amiben beállítja a hiányolt attribútumot, majd kezeli a vágólapot.

Szóval vegyünk fel egy makrót VS 2010-ben és a kapott kódot cseréljük le az alábbival:

Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE100
Imports System.Diagnostics

Public Module RecordingModule

    '' Handle clipboard
    Private clipText As String

    Public Property ClipboardText() As String
        Get
            RunThread(AddressOf GetClipboardText)
            Return clipText
        End Get
        Set(ByVal value As String)
            clipText = value
            RunThread(AddressOf CopyToClipboard)
        End Set
    End Property

    Private Function RunThread(ByVal fct As Threading.ThreadStart)
        Dim thread As New Threading.Thread(fct)
        thread.ApartmentState = Threading.ApartmentState.STA

        thread.Start()
        thread.Join()
    End Function

    Private Sub GetClipboardText()
        clipText = My.Computer.Clipboard.GetText()
    End Sub

    Private Sub CopyToClipboard()
        My.Computer.Clipboard.SetText(clipText)
    End Sub

    '' Copy source related data to clipboard
    Sub Copy()
        Dim textSelection As EnvDTE.TextSelection
        Dim codeElement As EnvDTE.CodeElement

        Try
            textSelection = DTE.ActiveWindow.Selection
            codeElement = textSelection.ActivePoint.CodeElement(vsCMElement.vsCMElementFunction)
            If Not (codeElement Is Nothing) Then
                doc = codeElement.ProjectItem.Document.FullName()
                line = textSelection.CurrentLine()
                objName = codeElement.FullName()
                txt = doc & ":" & line & " - " & objName & "()"

                ClipboardText = txt
            Else
                MsgBox("No code found", MsgBoxStyle.Information, "Info")
            End If
        Catch x As Exception
            MsgBox(x.Message(), MsgBoxStyle.Exclamation, "Exception")
        End Try
    End Sub

End Module

A kód eleje a vágó lap kezelését valósítja meg. Az én kódom pedig az utolsó subroutine, a Copy() névre hallgat. Ez kiszedi a kurzor pozíciója alapján a kódból a szükséges infókat és beformázza, majd kiteszi az egészet a vágólapra.

Betűhöz rendelés: Tools -> Options -> Environment -> Keyboard -> Show commands contanining: "macros.<projekt név><modul név>.Copy" -> Global. Én a magyar billentyűzeten a ctrl+í-hez kötöttem. Ne feledjük az Assign gombot megnyomni az Ok előtt!

Most már csak a megosztás kérdése maradt. Alt+F11 (Tools -> Macros -> Macros IDE...) -> Ctrl+E (File -> Export. Nálam a short cut nem működöt. Hmmm.). Ez egy <modul név>.vb file-t csinál.

Import: Tools -> Macros -> Load Macro Project... Ez nem megy, mert *.vsmacros file-t keres, de hogyan lehet ilyet kreálni???

Nem eléggé világos, hogy VS2010-ben miért a VS2005 jön fel, amikor a macro szerkesztésére kerül a szó. Valami el van állítva a VS2010-ben.

Jó szórakázást!

Legyünk jól fromázottak minden nap!

A bejegyzés trackback címe:

https://qltura.blog.hu/api/trackback/id/tr695117508

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása