Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2009, 13:31   #1
SarahConner
Пользователь
 
Аватар для SarahConner
 
Регистрация: 03.01.2009
Сообщений: 32
По умолчанию кривая кодировка при сохранении в txt

Всем здравствуйте.
Вот код программки.
======
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
f:= TStringList.Create();
x:=120; y:=700; y1:=550;

  SetCursorPos(x, y);
  Mouse_Event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
  SetCursorPos(x, y1);
  Mouse_Event(MOUSEEVENTF_LEFTUP, x, y1, 0, 0);

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
 f.Text:=ClipBoard.AsText;
  if ClipBoard.HasFormat(CF_Text)
 then
 begin
 f.savetofile('D:\МД\B- Delphi\Примеры\Мышь моя\text.txt')
 end
 else MessageDlg('В буфере обмена не текст!',mtError,[mbOK],0);
 f.Free;
end;
====
Все работает, но в text.txt попадает вот что:
?????: Mephistatus ?????? ??????? ?????? ? ???????
?????: ? natali9 ???????? 15 ? ??? ????
Где вопросы, там в сторонней программе русский текст.
Если же копировать ручками Ctrl+c и Ctrl+v, то все вставляется правильно. Я по поиску шерстил 2 часа. нашел ветки, там обсуждалась кодировка при вставке из буфера, пробовал от туда советы - не помогло.
Буду рад услышать мнение аудитории.
I'll be back

Последний раз редактировалось Stilet; 28.04.2009 в 14:14.
SarahConner вне форума Ответить с цитированием
Старый 28.04.2009, 13:44   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Из буфера копируются строки на русском языке ?
Если да, то можно попробовать через перевод раскладки клавиатуры:
Код:
KLayout: array [0..1023] of char;
...
...
...
  GetKeyboardLayoutName(KLayout);// запоминаем какая была раскладка
  LoadKeyboardLayout('00000419',KLF_ACTIVATE);  // переключаем на русский
  f.Text:=ClipBoard.AsText;// кусок твоего кода
  LoadKeyboardLayout(KLayout, KLF_ACTIVATE);// возвращаемся к запомненному
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 28.04.2009 в 14:23. Причина: поправил свою ОШИБКУ ....
Kotofff вне форума Ответить с цитированием
Старый 28.04.2009, 14:03   #3
SarahConner
Пользователь
 
Аватар для SarahConner
 
Регистрация: 03.01.2009
Сообщений: 32
По умолчанию

Спасибо за оперативность.
Ругается на это: GetKeyboardLayoutName(LKL);
Наверное надо указать тип LKL?
I'll be back
SarahConner вне форума Ответить с цитированием
Старый 28.04.2009, 14:15   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Наверное надо указать тип LKL?
Да LKL:HKL;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2009, 14:24   #5
SarahConner
Пользователь
 
Аватар для SarahConner
 
Регистрация: 03.01.2009
Сообщений: 32
По умолчанию

ошибка ??
[Pascal Error] Unit1.pas(38): E2010 Incompatible types: 'HKL' and 'PAnsiChar'

(прошу прощения за такую пошаговость вопросов, но эта сторона языка мне еще не известна)
а действительно может быть проблема из-за раскладки, ведь при копировании руками все нормально?
I'll be back
SarahConner вне форума Ответить с цитированием
Старый 28.04.2009, 14:27   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Короче смысл в переключении раскладки для копируемого текста:

Delphi World

Код:
//На русский
procedure TForm1.Button1Click(Sender: TObject);
var
  Layout: array[0.. KL_NAMELENGTH] of char;
begin
  LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE);
end;

//На английский
procedure TForm1.Button2Click(Sender: TObject);
var
  Layout: array[0.. KL_NAMELENGTH] of char;
begin
  LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);
end;
Или как Котов сказал:
Код:
var CurrentKeyboard:HKL;
...
 CurrentKeyboard:=GetKeyboardLayout(0); // Запомним раскладку
 LoadKeyboardLayout('00000419',KLF_ACTIVATE); // на русский
...
ActivateKeyboardLayout(CurrentKeyboard,0); // Обратно
I'm learning to live...

Последний раз редактировалось Stilet; 28.04.2009 в 14:30.
Stilet вне форума Ответить с цитированием
Старый 28.04.2009, 15:26   #7
SarahConner
Пользователь
 
Аватар для SarahConner
 
Регистрация: 03.01.2009
Сообщений: 32
По умолчанию

Ребята, ВСЕМ огромное спасибо. Смена раскладки помогла.
Благодаря такой вот невозмездной помощи такие как я и становятся в чем-то грамотней.
Еще раз спасибо.
I'll be back
SarahConner вне форума Ответить с цитированием
Старый 28.04.2009, 15:33   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
невозмездной помощи
Загнула...
Цитата:
Еще раз спасибо.
От нас обоих - всегда пожалуйста.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировка при вводе данных через php-myadmin и sql запросы serg-php PHP 4 27.09.2009 17:03
сообщение с вопросом о сохранении при закрыти формы. Delphi aks Помощь студентам 3 23.03.2009 17:09
Ошибка при сохранении текста перед выходом Shouldercannon Общие вопросы Delphi 1 17.12.2008 14:42
Кривая Безье ELL Помощь студентам 4 20.05.2008 22:56
Ошибка при записи в файл txt Alex_Ku Помощь студентам 2 28.04.2007 12:15