Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > использование буфера


Автор: Bisy 22.6.2006, 03:00
подскажите как правильно использовать буфер обмена в ВБ
следующий код знаю, но вот беда текс копируется, но при попытке вставить в другие приложения возникают ошибки, как это можно обойти
Код

Private Sub cmdCOPY_Click()
Dim Tmp as String
     Tmp=txtText.SelText
     Clipboard.Clear
     Clipboard.SetText Tmp, vbcfText
End Sub

данный код очень нестабиле, Возможно ли его написать по другому? 

Автор: Akina 22.6.2006, 10:27
Какие ошибки? что значит "нестабилен"? Ты можешь внятно описывать проблему?
 

Автор: IcyJet 22.6.2006, 12:05
Цитата

Спокойствее души и нестабильность нестоит путать тормознутостью VB smile 

Хотя я бы несказал что Vb тормознутый...

А если ненравится средста VB, есть Win32 API... с его бООльшыми возможностями, и столь же бООльшыми ошибками ...
(в некоторых случиях smile )  

Автор: Bisy 23.6.2006, 00:56
Суть дела заключается в том что текст нормально копируется и вставляется в текстовых полях всех программ написанных на VB, а если требуется вставить куда то еще то возникает проблема!
P.S. Данная проблема косается только русских символов!, а нестабильность заключается в том что непредставляется возможным определить различия между программами! 

Автор: IcyJet 23.6.2006, 09:00
Может проблемы с совместимостью ANSI и Unicode? 

Автор: Akina 23.6.2006, 09:26
Цитата(Bisy @  23.6.2006,  01:56 Найти цитируемый пост)
Данная проблема косается только русских символов!, 

Проблема известная. К Vb отношения не имеет. 

Решение - перед копированием в буфер нужно установить русскую раскладку клавиатуры. 

Автор: Bisy 24.6.2006, 00:46
СПАСИБО!!! РАБОТАЕТ!!!
А программно это какнибудь обойти можно? или всеже в VB это непредусмотрено 

Автор: Игорь 25.6.2006, 09:35
Ниже приведенный код был взят из моих заготовок. С этим кодом ошибки вобще не возникают. Перед копированием текст должен быть выделен!!! 

Код

Private Sub mnuEditCopy_Click()
‘Если выделен какой-либо текст, скопировать его в буфер обмена.
If Text1.SelLength = 0 Then
Beep
Exit Sub
End If
Clipboard.SetText Text1.SelText
End Sub
 

Автор: cardinal 25.6.2006, 13:20
Только 
Код

Clipboard.Clear

я бы все таки сделал... Без него у меня
Код

Clipboard.SetText Text1.SelText

Ничего не делала. 

Автор: Игорь 25.6.2006, 13:33
Clipboard.SetText  - Размещает выделенный блок текста в буфере обмена, замещая любой текст, который находится там к этому моменту.
Clipboard.GetText - Возвращает текст из буфера обмена.
 

Автор: cardinal 25.6.2006, 15:29
Цитата(Игорь @  25.6.2006,  12:33 Найти цитируемый пост)
Размещает выделенный блок текста в буфере обмена, замещая любой текст, который находится там к этому моменту.

Код

Option Explicit

Private Sub Command1_Click()
If Text1.SelLength = 0 Then
Beep
Exit Sub
End If
Clipboard.SetText Text1.SelText
End Sub

Private Sub Command2_Click()
Text2.Text = Clipboard.GetText
End Sub

Так у меня все пашет, а если я иду в Word и делаю Ctrl-V, то вставляется совсем не то, что ты ожидаешь... smile  

Автор: Bisy 26.6.2006, 07:44
Такой код позволяет однозначно скопировать и вставить текст в WORD.
Код

Private Sub cmdCOPY_Click()
Dim Tmp as String
     Tmp=txtText.SelText
     Clipboard.Clear
     Clipboard.SetText Tmp, vbcfRTF
End Sub


Однако возникает вопрос как программно поменять раскладку на клаве? 

Автор: Тутанхамец 26.6.2006, 12:11
Раскладку на клаве программно поменять так:

Код

Option Explicit
Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Private Const KLF_ACTIVATE = &H1

Private Sub Command1_Click()
Dim s As String, i As Long
s = "00000419"
i = LoadKeyboardLayout(s, KLF_ACTIVATE)
If i = 0 Then MsgBox ("error")
End Sub


Подробнее смотри в MSDN (можно найти на www.microsoft.com) функции GetKeyboardLayout, GetKeyboardLayoutName, GetKeyboardLayoutList, LoadKeyboardLayout и т.п.

Код, копирующий без проблем (вроде бы smile ) с русскими буквами, выглядит так:

Код


Private Sub Command1_Click()
Dim s As String, i As Long
s = "00000419"
i = LoadKeyboardLayout(s, KLF_ACTIVATE)
If i = 0 Then MsgBox ("error")
Clipboard.Clear
Clipboard.SetText Text1.Text
s = "00000409"
i = LoadKeyboardLayout(s, KLF_ACTIVATE)
If i = 0 Then MsgBox ("error")

End Sub



 

Автор: cardinal 26.6.2006, 21:15
Тут тоже немного написано...
http://vingrad.ru/VB-VB-002879 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)