Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Открыть новую тему     Написать ответ в эту тему

6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Функция GetWindowText копирует текст заголовка определяемого окна (если окно имеет его) в буфер. Если заданное окно является органом управления, копируется его текст. Однако функция GetWindowText не может извлекать текст органа управления в другом приложении.

Это я взял из описания. Да и как получить "дескриптор окна или элемента управления с текстом"..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 09:57 13-10-2006
vidic777



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброй ночи  
 
Подскажите а есть ли в BDS 2006 такое же окошко при открытии *.dpk или *.bpk файлов как в Delphi 7 или в C++Builder 6 с кнопками Cjmpile и Install а если нету то как правильно ставить компоненты или где об этом можно прочесть чтоб не захламлять топик простыми вопросами. (Три дня назад поставил  BDS 2006 и теперь пытась перейти на него с C++Builder 6).
 
Заранее спасибо

Всего записей: 1313 | Зарегистр. 16-02-2005 | Отправлено: 04:15 14-10-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk

Цитата:
Однако функция GetWindowText не может извлекать текст органа управления в другом приложении.

Тогда SendMessage c сообщением WM_GETTEXT.

Цитата:
Да и как получить "дескриптор окна или элемента управления с текстом"..

Это тот самый хэндл, которому в первоначальном варианте посылалось WM_COPY.

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 21:56 14-10-2006
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Abs62
В том-то и проблема, что я не знаю какой у меня дескриптор, потому что он определяется только зная тип компонента:

Код:
HWND h2 = FindWindowEx(h, 0, "TEdit", "");

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 23:13 14-10-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk

Цитата:
В том-то и проблема, что я не знаю какой у меня дескриптор, потому что он определяется только зная тип компонента:

Ну дык тип то ты знаешь (либо Edit(TEdit) либо Static) получаешь хэндл этого контрола, и потом шлешь ему
Цитата:
 SendMessage c сообщением WM_GETTEXT.
предварительно послав сообщение с получением длины текста, чтобы правильно выделить буфер для текста.
 


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:24 16-10-2006
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Static

Он не находит его (:
 
Чтобы не быть голословным: http://www.webfile.ru/1151045 (26 Кб).

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 11:34 16-10-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk
Чтобы проверить себя, сделай следующее, к тотал командеру есть плагин, который показывает все контролы на форме, проверь, есть ли на этой форме вообще статики (TLabel<>Static) из нее вообще текст никогда не получишь Если тебе надо получить из нее текст, то ИМХО единственный способ, это эмпирически определить ее положение на форме, сделать захват этой области и сохранить в бмп хотя бы для дальнейших анализов, ибо лабела - это рисунок на форме. На каком приложении тренируешься?

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:15 17-10-2006
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ShIvADeSt
Да, сегодня обязательно вечером попробую посмотреть формы.
Я вот только не понимаю ... почему нельзя просто скопировать выделенный текст, знаючи дескриптор окна.
А проверю я в Опере (надо и для ИЕ, но думаю, что наналогично).

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 10:26 19-10-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk

Цитата:
Я вот только не понимаю ... почему нельзя просто скопировать выделенный текст, знаючи дескриптор окна.

Можно попробовать (но только для выделенного текста) сделать следующее, знаешь дескриптор окна, выносишь его на передний план с передачей фокуса (есть такое, если на форуме не найдешь, дам код работает под любой виндой), посылаешь ctrl+с (эмуляцию нажатий клавиш обсуждали уже не один раз, не найдешь - читай выше ). Все - выделенный текст скопирован.


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:20 20-10-2006
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот такой код у меня (и естественно не работает):

Код:
HWND h = GetForegroundWindow();
SetForegroundWindow(h);
 
  //SendMessage(h,WM_KEYDOWN,VK_CONTROL,0);
  //SendMessage(h,WM_KEYDOWN,44,0);
 
   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);

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 10:58 20-10-2006
EmeJIbka



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Подскажите а есть ли в BDS 2006 такое же окошко при открытии *.dpk или *.bpk файлов как в Delphi 7 или в C++Builder 6 с кнопками Cjmpile и Install

Открываешь пакет с компанентами, затем Project Manager, жмешь на имени пакета правой клавишей, там видишь Compile|Install

Всего записей: 167 | Зарегистр. 14-03-2005 | Отправлено: 11:10 22-10-2006
CBB



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то я в растерянности. А как в билдере от bds2006 открыть проект от 6-го билдера? В свое время 6-й от 5-го открывал без проблем, а 2006 вообще расширения .bpr не понимает, даже если заставить открыть xx.bpr как проект - открывает как текстовый файл, и все.

Всего записей: 1173 | Зарегистр. 09-10-2004 | Отправлено: 17:02 22-10-2006
EmeJIbka



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Что-то я в растерянности. А как в билдере от bds2006 открыть проект от 6-го билдера? В свое время 6-й от 5-го открывал без проблем, а 2006 вообще расширения .bpr не понимает, даже если заставить открыть xx.bpr как проект - открывает как текстовый файл, и все.
Только что открыл проект от 6 билдера в 2006 - всё работет без проблем, откройте Project Managet, может там прячуются ваши исходники.

Всего записей: 167 | Зарегистр. 14-03-2005 | Отправлено: 21:14 22-10-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk

Цитата:
HWND h = GetForegroundWindow();  SetForegroundWindow(h);

не понял смысла этого кода смысл форегроундное окно и так выносить вперед?

Цитата:
Вот такой код у меня (и естественно не работает):

 
как работает этот код, по таймеру или как? если по горячей клавише, то нужно обязательно сделать делей (например через Sleep(500) ) иначе не сработает (хз почему) уточни где находится данный код, чтобы мне проще было отладить.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:15 23-10-2006
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да, у меня стоит по вызову горячей клавиши.
Обработчик в unit.h:

Код:
BEGIN_MESSAGE_MAP
      VCL_MESSAGE_HANDLER(WM_HOTKEY, TMessage, WMHotkey)  
END_MESSAGE_MAP(TForm)

 
Функция в unit.cpp:

Код:
void __fastcall TForm1::WMHotkey(TMessage & msg)
{  
  HWND h = GetForegroundWindow();  
  SetForegroundWindow(h);  
 
  //SendMessage(h,WM_KEYDOWN,VK_CONTROL,0);  
  //SendMessage(h,WM_KEYDOWN,44,0);  
 
   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);
}

 
+ еще регистрация хоткея, но думаю это не столь важно в данном случае.
 
А где надо вставлять задержку? Пробовал в начале, в конце, между эмулированием нажатий клавиш - ничего.

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 11:14 23-10-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk

Цитата:
 
           Sleep(300);
           Keybd_Event(VK_CONTROL,0,0,0);
           Keybd_Event(Ord('C'),0,0,0);
           Keybd_Event(Ord('C'),0,2,0);
           Keybd_Event(VK_CONTROL,0,2,0);
 

кажется я понял в чем у тебя трабла, короче надо посылать в событие код ЗАГЛАВНОЙ буквы С, иначе летит фигня, сам намучился в свое время, пока не нашел баг, то есть если будет  Keybd_Event(Ord('c'),0,0,0); то нифига не произойдет.


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:11 24-10-2006
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ShIvADeSt
То, что доктор прописал, спасибо. +1
 
Только Ord видимо из семейсства паскаля, использую (int)'C'.

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 10:12 24-10-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk

Цитата:
Только Ord видимо из семейсства паскаля, использую (int)'C'.

не видимо, а так оно и есть так как на С могу только с АПИ работать, поэтому просто привел рабочий пример, а дальше его не трудно довести до ума.
Я рад, что все получилось

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:12 25-10-2006
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как откомпилировать прогу, чтоб работала и на компах без BCB? Убрал runtime packages, и все равно прога требует какой-то BORLNDMM.DLL

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 04:12 25-10-2006
JohnC



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar
Отключи в настройках проекта:
 
    * Project->Options->Linker->Use dynamic RTL
    * Project->Options->Packages->Build with runtime packages

Всего записей: 198 | Зарегистр. 14-07-2004 | Отправлено: 10:57 25-10-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru