Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 173
от 07.07.2005, 01:40

Администратор:Калашников О.А.
В номере:Вопросов: 6, Ответов: 25


Вопрос № 22931: Здравствуйте уважаемые эксперты. Есть dbf таблицы созданные в foxpro под дос. Так когда открываешь эти таблицы в делфи через ado русский тескт читается не во всех полях. Т.е. в поле 1 в записи один если он читается то в том же поле, но в зап...
Вопрос № 22932: Здравствуйте уважаемые эксперты. Как используя keybd_event послать нажатие управляющих клавиш(Вверх, вниз, Page Up и т.д.) Спасибо....
Вопрос № 22936: Уважаемые эксперты! Как копироват файл: Нажав на один объект ShellListView1 и нажав на папку в ShellListView2? Не могли бы вы дать прямо с исходником. Спасибо за ответы....
Вопрос № 22942: Здравствуйте. 1.Как можно послать окну нажатие клавиш Alt+shift (изменить язык ввода)? 2.Как эмулировать нажатие клавиш с шифтом? Спасибо....
Вопрос № 22944: Здравствуйте эксперты, посоветуйте пожалуйста компонент для работы с COM портом!...
Вопрос № 22945: Мне нужно в програму брать изображения Пример: В папке Game находится папка Images и в ней нужно взять 1.bmp. Как сделать так,чтобы независимо от директории,где находится Game можно было бы брать изображение? на Visual basic это вот ...

Вопрос № 22.931
Здравствуйте уважаемые эксперты.

Есть dbf таблицы созданные в foxpro под дос. Так когда открываешь эти таблицы в делфи через ado русский тескт читается не во всех полях. Т.е. в поле 1 в записи один если он читается то в том же поле, но в записи два вместо русских букв крякозябры. Пробывал настройки windows менять(шрифты, кодировки) ничего не помогло. Вопрос: как можно решить данную проблему, как переконвертировать таблицу из одной кодировки в другую. Если можно то поделитесь куском кода.
Отправлен: 01.07.2005, 12:59
Вопрос задал: Crick (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Gin

Здравствуйте, Crick!

Вариантов много. Один из них - смотрите приложение.

С Уважением, Gin.

Приложение:

Ответ отправил: Gin (статус: Студент)
Отправлен: 01.07.2005, 13:52

Отвечает: Jadd
Здравствуйте, Crick!
Помнится я решал как-то такую задачу. Я ее решил заменой фонта, поддерживающего дос кодировку (по-моему, Termial) в БДЕ. Как сделать для ADO мимо БДЕ не знаю. Могу только предложить воспользоваться функциями OemToAnsi из WinAPI и перекодировать все текстовые поля таблицы. Впринципе, если не получится, пиши на xlcoder@mail.ru подумаю еще.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 01.07.2005, 15:28

Отвечает: Витомский Вадим Викторович
Здравствуйте, Crick!
Можно попробовать API-функцию OEMToAnsi(PChar(s),PChar(s)) для перекодировки одной строки. Для перекодировки БД в цикле пройтись по всем записям.
Ответ отправил: Витомский Вадим Викторович (статус: 1-ый класс)
Отправлен: 04.07.2005, 09:23


Вопрос № 22.932
Здравствуйте уважаемые эксперты.
Как используя keybd_event послать нажатие управляющих клавиш(Вверх, вниз, Page Up и т.д.)
Спасибо.
Отправлен: 01.07.2005, 13:14
Вопрос задал: Ivaan (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Gin

Здравствуйте, Ivaan!

Вверх, вниз, Page Up и т.д.:

vk_Up = Вверх or Page Up;
vk_Down = Вниз;
vk_Left = и т.д.;
vk_Right = и т.д.;

Простейший пример:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_UP then ShowMessage('Теперь клавиша "VK_UP"');
if Key=VK_Down then ShowMessage('Теперь клавиша "VK_Down"');
if Key=VK_Left then ShowMessage('Теперь клавиша "VK_Left"');
if Key=VK_Right then ShowMessage('Теперь клавиша "VK_Right"');
if Key=VK_End then Close;
end;

Вариант применения (для текста и клавиш) в приложении.

С Уважением, Gin.

Приложение:

Ответ отправил: Gin (статус: Студент)
Отправлен: 01.07.2005, 14:38
Оценка за ответ: 5

Отвечает: Ерёмин Андрей
Здравствуйте ещё раз, Ivaan!
Я же Вам написал:
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
Первая строка посылает сообщение всей системе, будто на клавиатуре нажата клавиша. Вторая строка посылает

сообщение, что нажатая клавиша отпущена. Старайтесь не забывать эту строку. Конечно, должно и так работать, но

когда-нибудь, где-нибудь, это может вызвать ошибку или заглючить. Вместо VK_RETURN подставляйте любую нужну.

клавишу (VK_UP,VK_DOWN,
Чтобы узнать код нужной клавиши, откройте файл справки:
Пуск - Программы - Borland Delphi - Help - MS SDK Help Files - Win32s Programmer's Reference.
В строке поиска введите "Virtual-Key Codes". В этом разделе находится большая таблица обозначений клавиш. Кроме

значения VK_##### можно указывать код символа. Например, $43 - клавиша "C". Вот пример, как "нажать на

клавиатуре" (виртуально) комбинацию Ctrl+C:
keybd_event(VK_CONTROL,0,0,0);
keybd_event($43,0,0,0);
keybd_event($43,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
И перед "нажатиями" не забывайте активировать нужное окно.
Удачи!
---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 01.07.2005, 16:59
Оценка за ответ: 5

Отвечает: streetcat
Здравствуйте, Ivaan!
keybd_event(VK_UP, 0, 0, 0);
вместо VK_UP (клав. "Вверх") подставляй:
VK_DOWN (вниз), VK_LEFT, VK_RIGHT (влево, вправо)
VK_NEXT и VK_PRIOR (Page DOWN, Page Up)
Открывай WINAPI хелп и пиши в указатель строку "Virtual-Key Codes"
---------
WinERROR: Keyboard not detected. Press Enter to continue
Ответ отправил: streetcat (статус: 7-ой класс)
Отправлен: 04.07.2005, 19:03


Вопрос № 22.936
Уважаемые эксперты!
Как копироват файл:
Нажав на один объект ShellListView1 и нажав на папку в ShellListView2?
Не могли бы вы дать прямо с исходником.
Спасибо за ответы.
Отправлен: 01.07.2005, 14:58
Вопрос задал: Sassoft (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Tsechoev Bagaudin
Здравствуйте, Sassoft!
Если нужно таким же макаром копировать папку, то вот ссылка как копировать папку:
http://delphiworld.narod.ru/base/copy_del_dirs.html
Удачи!

Приложение:

---------
Есть только одно зло - невежество, и только одно благо - знания

Ответ отправил: Tsechoev Bagaudin (статус: 6-ой класс)
Отправлен: 01.07.2005, 17:23


Вопрос № 22.942
Здравствуйте.
1.Как можно послать окну нажатие клавиш Alt+shift (изменить язык ввода)?
2.Как эмулировать нажатие клавиш с шифтом?
Спасибо.
Отправлен: 01.07.2005, 15:30
Вопрос задал: Ivaan (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Ерёмин Андрей
Здравствуйте третий раз, Ivaan! :)
Помогаю Вам в третий раз по тому же вопросу. Итак:
1. Пояснение: VK_MENU - обозначение [Alt].
keybd_event(VK_MENU,0,0,0);
keybd_event(VK_SHIFT,0,0,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
2. Сначала зажимаем [Shift], потом нажимаем нужную клавишу и отпускает [Shift.]
keybd_event(VK_SHIFT,0,0,0);
keybd_event($58,0,0,0);
keybd_event($58,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
Будет нажато [Shift]+[X].
Ещё раз удачи!
---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 01.07.2005, 16:59
Оценка за ответ: 5

Отвечает: Tsechoev Bagaudin
Здравствуйте, Ivaan!
Если ты хочешь менять раскладку клавиатуры это делается просто
1. Вешаешь на какие нибудь события
var
Layout: array[0.. KL_NAMELENGTH] of char;
begin
// Английская раскладка
LoadKeyboardLayout(StrCopy(Layout,'00000419'),KLF_ACTIVATE);
// Русская
LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);
end;
2. Вот ссылка по второму вопросу http://timhome.hut.ru/delphi/myFAQ_Delphi01.htm#83
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 6-ой класс)
Отправлен: 01.07.2005, 17:52

Отвечает: Gin

Здравствуйте, Ivaan!

1. В следующий раз задавайте вопрос конкретней - правый/левый Shift/Alt, для активного/неактивного окна и т.д..
2. Пример ЭМУЛЯЦИИ в приложении.

С Уважением, Gin.

Приложение:

Ответ отправил: Gin (статус: Студент)
Отправлен: 01.07.2005, 18:25


Вопрос № 22.944
Здравствуйте эксперты, посоветуйте пожалуйста компонент для работы с COM портом!
Отправлен: 01.07.2005, 15:51
Вопрос задал: -[tr1pl3x]- (статус: 1-ый класс)
Всего ответов отправлено: 4

Отвечает: Voituk Alexander
Здравствуйте, -[tr1pl3x]-!
Я пользую библиотеку ComPort Library находится http://comport.sf.net/
Бесплатная и работает отлично.
Ответ отправил: Voituk Alexander (статус: 9-ый класс)
Отправлен: 01.07.2005, 16:24

Отвечает: Ерёмин Андрей
Здравствуйте, -[tr1pl3x]-!
Компонент не могу посоветовать, зато подскажу неплохой модуль:
http://www.delphi.int.ru/download.php?id=26.
Содержит функции и процедуры для получения и отправки данных через COM-порт.
---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 01.07.2005, 16:59

Отвечает: Tsechoev Bagaudin
Здравствуйте, -[tr1pl3x]-!
Вышли письмо с темой на адрес admin@ingush.com, вышлю компоненты.

---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 6-ой класс)
Отправлен: 01.07.2005, 17:53

Отвечает: Malish
Здравствуйте, -[tr1pl3x]-!
Встречал какой-то компанент, он мне не понравился. Лучше напрямую работать с COM портом через CreateFile. Это точно!!!
Ответ отправил: Malish (статус: Студент)
Отправлен: 02.07.2005, 01:58


Вопрос № 22.945
Мне нужно в програму брать изображения Пример:
В папке Game находится папка Images и в ней нужно взять 1.bmp.
Как сделать так,чтобы независимо от директории,где находится Game можно было бы
брать изображение?
на Visual basic это вот так:=PicturePath = App.Path + "\images\1.jpg"
Где App.path-директория,где находится программа
А как будет на Delphi?
Отправлен: 01.07.2005, 15:55
Вопрос задал: Sassoft (статус: Посетитель)
Всего ответов отправлено: 11

Отвечает: Rusland
Здравствуйте, Sassoft!
ExtractFilePath(Application.ExeName);
или
GetCurrnetDir();
Ответ отправил: Rusland (статус: 6-ой класс)
Отправлен: 01.07.2005, 16:00

Отвечает: John Freeman
Здравствуйте, Sassoft!
Как-то ты странно это делаешь...
По соглашениям OS есть просто относительные пути:
image:='images1.jpg';
---------
You're trying to take me They trying to make me This is the only Gives me the only thing Tired of lying, I'm tired of lying The only thing I inderstand is what I feel...
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 01.07.2005, 16:07

Отвечает: Voituk Alexander
Здравствуйте, Sassoft!
А на Дельфине точно так же. Только путь, где находится твой исполняемый файл будет так
ExtractFilePath(Application.ExeName) + 'image1.jpg';
Ответ отправил: Voituk Alexander (статус: 9-ый класс)
Отправлен: 01.07.2005, 16:28

Отвечает: Ерёмин Андрей
Здравствуйте, Sassoft!
Да практически точно также:
PicturePath := ExtractFilePath(Application.ExeName) + 'images1.bmp';
Application.ExeName содержит полный путь к exe-файлу программы,
ExtractFilePath возвращает каталог, в котором находится указанный файл.
Удачи!
---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 01.07.2005, 16:59

Отвечает: Jadd
Здравствуйте, Sassoft!
Да точно так же. За тем исключением, что в дельфях есть класс Application, а в нем свойство ExeName, которое содержит полный путь к приложению, включая имя экзешника. Стало быть твой кусок кода будет выглядеть так:

var
exeName: String;
appPath: String;
begin
appPath := Application.ExeName;
exeName := ExtractFileName(appPath);
Delete(appPath, Pos(exeName, appPath), Length(exeName));
appPath := appPath + 'images1.jpg';

Удачи.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 01.07.2005, 18:55

Отвечает: Delphin
Здравствуйте, Sassoft!
Смотри приложение как будет.

Приложение:

---------
Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com

Ответ отправил: Delphin (статус: 7-ой класс)
Отправлен: 01.07.2005, 20:00

Отвечает: -[tr1pl3x]-
Здравствуйте, Sassoft! Даю самый простой, а главное рабочий пример. Независиммо в какой директории находится прога, всё будет работать.

Приложение:

Ответ отправил: -[tr1pl3x]- (статус: 1-ый класс)
Отправлен: 01.07.2005, 21:19

Отвечает: Malish
Здравствуйте, Sassoft!
Вставь такую функцию:
function GetExePath:string;
begin
Result:=ExtractFilePath(paramstr(0));
end;
Она вернет тебе строку с указанием пути по которому лежит программа, а потом просто добавишь ExePathstring+'images1.jpg'.
Ответ отправил: Malish (статус: Студент)
Отправлен: 02.07.2005, 02:02

Отвечает: Витомский Вадим Викторович
Здравствуйте, Sassoft!
Аналогично и на DELPHI:
PicturePath := ExtractFilePath(Application.EXEName)+'images1.jpg';
Ответ отправил: Витомский Вадим Викторович (статус: 1-ый класс)
Отправлен: 04.07.2005, 09:35

Отвечает: VBA
Здравствуйте, Sassoft!

Вот тоже самое но на Delphi:
PicturePath:=ExtractFilePath(Application.ExeName)+'Images1.jpg';
---------
Неправ вечно юзер, ибо прав всегда Админ!
Ответ отправил: VBA (статус: 5-ый класс)
Отправлен: 04.07.2005, 12:31

Отвечает: streetcat
Здравствуйте, Sassoft!
Чтобы получить директорию программы нужен код:
path := ExtractFilePath(paramstr(0));

---------
WinERROR: Keyboard not detected. Press Enter to continue
Ответ отправил: streetcat (статус: 7-ой класс)
Отправлен: 04.07.2005, 19:03


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное