|
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łę.
|
|