Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych

Makra - Wstaw (ze schowka) jako tekst niesformatowany

Artur Miernik - 8 Kwiecień 2015, 17:46
Temat postu: Wstaw (ze schowka) jako tekst niesformatowany
Patrząc na ten wątek, pomyślałem sobie, że być może warto naprawić to co od dawna nie działa w Corelu tak, jak trzeba, czyli wstaw specjalnie jako tekst (niesformatowany). Chodzi o to, żeby wstawiona fraza nie lądowała na środku strony, w ramce tekstu o szerokości tejże strony, lecz wklejała się tam, gdzie ustawiliśmy kursor narzędzia tekst. I lepiej niech nic nie robi się, jeśli kursor tekstowy nie jest ustawiony.

Poniższy kod działa i pochodzi z makra nagranego podczas wywołania edycja/ wklej specjalnie… jako tekst:
Kod:
Sub wklej_niesformatowane()
    ' Description:
    '     Wstawia tekst ze schowka jako niesformatowany
    ActiveLayer.PasteSpecial "Text"
    Dim Paste1 As ShapeRange
    Set Paste1 = ActiveSelectionRange
End Sub


Kłopot w tym, że nie wiem co powinienem wpisać w miejsce As ShapeRange.

Radźcie Panowie.

Shame - 8 Kwiecień 2015, 20:08

String?
chezare - 11 Kwiecień 2015, 14:09

Ja bym na Twoim miejscu nic nie wpisywał. :-)
" …gdzie ustawiliśmy kursor narzędzia tekst. I lepiej niech nic nie robi się, jeśli kursor tekstowy nie jest ustawiony."
Artur, musisz się zdecydować jaki ma być kursor. :-)
Ja się w tym wszystkim zupełnie nie orientuję, ale widziałbym to tak. Najpierw trzeba ustalić pozycję kursora. Przyjmijmy że mamy kurX i kurY, które określają położenie kursora. Jak mamy te dane, to trzeba skonstruować coś takiego:

Dim Paste1 As ShapeRange
Set Paste1 = ActiveSelectionRange
Paste1.PositionX = kurX
Paste1.PositionY = kurY


Pozycja została zmieniona, ale pojawia się kolejny problem, jak zmienić rozmiar ramki
tekstowej tak żeby pasowała do tekstu?
Poza tym w taki sposób wstawia się tekst jak najbardziej sformatowany, choć nie tak jak w dokumencie z którego zostaje kopiowany, ta ramka ma przypisany font, jego rozmiar itd.

Przeczytałem to co napisałem i widzę, że to bez sensu jest. Jak ustalić pozycję gdzie ta ramka ma zostać wstawiona? Trzeba kliknąć w to miejsce, ustawić kursor w tym miejscu i co teraz? Jak uruchomić to makro, z klawiatury? To powinno działać tak jak wstawianie grafiki, wybierasz plik i klikasz gdzie ma zostać wstawiona jego zawartość.

Artur Miernik - 11 Kwiecień 2015, 15:44

Do makra, o ile będzie działało, podwiąże się skrót, np.: [ctrl]+[shift]+[v] i po kłopocie.
maroQ - 14 Kwiecień 2015, 14:22

Popracujcie sobie nad tym kodem:
Kod:
Sub PasteText()
    Dim txt As String
    txt = ClipboardGetText()
   
    If txt <> "" Then
        Dim x As Double, y As Double
        If ActiveDocument.GetUserClick(x, y, 1, 10, False, cdrCursorExtPick) = 0 Then
            ActiveLayer.CreateParagraphText x, y, x + 2, y - 2, txt
        End If
    Else
        MsgBox "Schowek nie zawiera tekstu", vbInformation, "-/\-"
    End If
End Sub

Function ClipboardGetText() As String
    Dim dob As DataObject
   
    Set dob = New DataObject
    dob.GetFromClipboard
    ClipboardGetText = dob.GetText
End Function

To jest samo wstawianie ze schowka w oparciu o kliknięcie użytkownika. Wymiary pola tekstowego można sobie ustawić wedle uznania.

chezare - 15 Kwiecień 2015, 20:39

Artur, Szaman naprawił wstawianie tekstu. Teraz tylko sobie dorobisz skrót i gitara. :-)
U mnie działanie procedury skończyło się na deklaracji

za co odpowiedzialna jest windowsowa biblioteka:

Po podłączeniu działa. :-)
Jeśli jednak spróbujecie wkleić ze schowka grafikę, to skończy się taki pomysł na:

i nie zobaczycie tekstu o tym, że w schowku tekstu nie ma. :-)
Oczywiście to drobny mankament, który można naprawić, np.:
Kod:
Function ClipboardGetText() As String
    Dim dob As DataObject
           On Error Resume Next
    Set dob = New DataObject
    dob.GetFromClipboard
    ClipboardGetText = dob.GetText
End Function

Na początku wydawało mi się, że to nie ma sensu, ale jestem coraz bliżej tego, żeby się do nowej funkcji przyzwyczaić. :-) Szaman zasłużył na pochwałę.


Powered by phpBB modified by Przemo © 2003 phpBB Group