Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StrToHex | Реализация 
V
    Опции темы
VOX
Дата 17.9.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Здравствуйте!
Пытаюсь зная хэндл, сменить текст в чудом едите.
Для начала реализую ввод хэндла, возникают проблемы,
прошу помочь, спасибо!
Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
HWND hWnd;
String TEXT = "!!!TEXT!!!!";
String ThWnd = Edit1->Text;
StrToInt(ThWnd);
IntToHex(ThWnd);
hWnd = HWND(ThWnd);
SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM) &TEXT);
}


Errors:
Код

[BCC32 Error] Unit1.cpp(76): E2285 Could not find a match for 'IntToHex(UnicodeString)'
[BCC32 Error] Unit1.cpp(77): E2031 Cannot cast from 'UnicodeString' to 'void *'


Добавлено через 1 минуту и 8 секунд
76 строка = 6 строке в приведенном мною коде здесь,
77 соответственно 7 строка

Добавлено через 7 минут и 47 секунд
ИСПРАВИЛ:
Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
HWND hWnd;
String TEXT = "!!!TEXT!!!!";
String ThWnd = Edit1->Text;
IntToHex(StrToInt(ThWnd),8);
hWnd = HWND(ThWnd);
SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM) &TEXT);
}

Errors: [BCC32 Error] Unit1.cpp(76): E2031 Cannot cast from 'UnicodeString' to 'void *'
вот на эту строку:
hWnd = HWND(ThWnd);
PM MAIL   Вверх
Alca
Дата 17.9.2009, 15:00 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Код

hWnd = (LPVOID)(ThWnd.c_str());


Добавлено через 3 минуты и 23 секунды
Код

void __fastcall TForm1::Button2Click(TObject *Sender) {
    HWND       hWnd = NULL;
    AnsiString TEXT = "!!!TEXT!!!!";
    AnsiString ThWnd = Edit1->Text;
    
    StrToInt(ThWnd);
    IntToHex(ThWnd);
    //hWnd = HWND(ThWnd);
    hWnd = (LPVOID)ThWnd.c_str();
    ::SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM) TEXT.c_str());
}


Это сообщение отредактировал(а) Alca - 17.9.2009, 15:01


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 17.9.2009, 15:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Скажу тебе по секрету компилятору плевать в какой системе ты передаешь целое число. В 10-й или 16-й.
А что касается преобразования ну дык ты хочешь преобразовать из строки в дескриптор. Это честно говоря я вижу в первые. Тогда уж наверно надо так.
Код

hWnd = HWND(ThWnd.ToInt()); 

PM MAIL   Вверх
VOX
Дата 17.9.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Код

HWND hWnd = NULL;
    AnsiString TEXT = "!!!TEXT!!!!";
    AnsiString ThWnd = Edit1->Text;
    IntToHex(StrToInt(ThWnd),8);
    hWnd = HWND(ThWnd.ToInt());
    ::SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM) TEXT.c_str());


Ввожу хэндл, мне выпадает окно с ошибкой, что введенный хэндл не есть  valid integer value...
Дело в том, что я ввожу хэндл в едит, т.е. он стрингом становится, потом его в Инт, а потом в 16-ричку.
Может мне как то иначе это делать?
PM MAIL   Вверх
Alca
Дата 17.9.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Код

::SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM) TEXT.c_str());


Попробуй сюда вручную хендл прописать


--------------------
PM WWW ICQ Skype Jabber   Вверх
Sonic7272
Дата 18.9.2009, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 18.9.2009

Репутация: 3
Всего: 3



Этот пример для посылки сообщения, имея хэндл в 10-ричной системе. 
Код

String Text="!!!Text!!!";
Edit1->Text=(int)Edit1->Handle;// для быстроты получаем кодом. 
int iHWND=StrToInt(Edit1->Text);
SendMessage((HWND)iHWND, WM_SETTEXT, 0, (LPARAM) Text.c_str());

Но в твоем случае нужно добавить функцию преобразования str_hex2int(пример). Напиши сам или погугли.

Функции 
Код

StrToInt(ThWnd);
IntToHex(ThWnd);

должны возвращать некоторые данные, смотрим в sysutils.hpp:
Код

extern PACKAGE int __fastcall StrToInt(const AnsiString S);
extern PACKAGE AnsiString __fastcall IntToHex(int Value, int Digits);

int и AnsiString соответственно, но эта связка нерабочая.
PM MAIL   Вверх
VOX
Дата 18.9.2009, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Всё сделал, ребята спасибо за помощь, выручили smile 
PM MAIL   Вверх
Mpak
Дата 18.9.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 12.11.2006

Репутация: 4
Всего: 7



Эм... выложи плз решение =) Интересно, что получилось)


--------------------
В любой откомпилированной программе есть, по крайней мере, одна ошибка...
P.S. А у меня их минимум две...
PM MAIL ICQ   Вверх
VOX
Дата 18.9.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



то МРАК:
Код

int hw = StrToInt(Edit1->Text);
String TEXT = "!!!!!!";
HWND hhWnd = HWND(hw);
::SendMessageA(hhWnd, WM_SETTEXT, 0, (LPARAM) TEXT.c_str());


Добавлено через 3 минуты и 47 секунд
ах да, вводить надо именно Decimal handle, строго, а то как то не работает иначе,
т.к. для выпрямления моих рук надо еще много времени  )))
PM MAIL   Вверх
dumb
Дата 20.9.2009, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(VOX @  18.9.2009,  12:05 Найти цитируемый пост)
ах да, вводить надо именно Decimal handle, строго, а то как то не работает иначе

не обязательно - просто шестнадцатеричные значения нужно вводить с префиксом 0x, например: 0xAC8
PM MAIL   Вверх
VOX
Дата 21.9.2009, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



не знал, спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.