Текущий архив: 2008.10.19;
Скачать: CL | DM;
ВнизSendmessage на TStatusbar Найти похожие ветки
← →
Alexandr_5 (2008-09-13 10:54) [0]Добрый всем день. Суть проблемы в следующем. Есть программа (чужая). По клику кнопки мне нужно вывести некоторый текст на статусбар этой программы. Вывода текста я добился в принципе, только осталась небольшая проблема, которую решить не могу никак: у меня текст выводится только в statusbar.panels[0] (вроде сюда, в общем в самую первую часть статусбара). Помогите кто чем может как мне например вывести текст в n-й тстатуспанели тстатусбара.
вот код мой:
procedure TForm1.Button1Click(Sender: TObject);
var
tabul, tabsh, memka, chat_hwnd,stb,p: HWND;
tk: TClipboard;
begin
chat_hwnd := FindWindow("TFrmJK", nil); //нашли форму
if chat_hwnd <> 0 then
begin
stb := FindWindowEx(chat_hwnd, 0, "TStatusBar", nil); // и статусбар
if stb <> 0 then
begin
p := FindWindowEx(stb, 0, "TStatusPanels", nil); //пытаемся найти панелс
if p <> 0 then
showmessage("!!!"); // но не находим
sendmessage(stb,WM_SETTEXT,0,lparam(lpctstr("1111"))); // в статус баре мой текст
end;
end;
end;
← →
Юрий Зотов © (2008-09-13 17:56) [1]Посмотрите сообщение SB_SETTEXT.
← →
Alexandr_5 (2008-09-14 12:30) [2]Прошу прощения за глупый вопрос.. А какой модуль надо подключить чтоб SB_SETTEXT не было Undeclared identifier?
в Messages нету..
← →
{RASkov} © (2008-09-14 12:32) [3]> [2] Alexandr_5 (14.09.08 12:30)
Сделай поиск по этому слову в директории с VCL.... прямо в делфи и сделай.
← →
Alexandr_5 (2008-09-14 17:42) [4]Спасибо, нашел.
Только теперь не пойму: почему
sendmessage(stb,WM_SETTEXT,4,lparam(lpctstr("текст")));
нормально на статусбар ставит слово "текст", а
sendmessage(stb,SB_SETTEXT,4,lparam(lpctstr("текст")));
какой-то невменяемый текст пишет. Как надо преобразовывать?
В интернете поискал, там только integer(pchar("...")), что в принципе одно и то же lparam(lpctstr("..."))..
← →
Palladin © (2008-09-14 17:54) [5]а кто сказал что параметры WM_SETTEXT и SB_SETTEXT совпадают?
← →
Alexandr_5 (2008-09-14 18:48) [6]Действительно не совпадают, но от этого легче не становится. В хелпе написано
SB_SETTEXT
wParam = (WPARAM) iPart | uType;
lParam = (LPARAM) (LPSTR) szText;
не понимаю, почему sendmessage(stb,SB_SETTEXT,4,lparam(lpstr("текст")));
всякую чушь выводит на статусбар.
В интернете вообще преобразовывают непонятно..
Куда мне копать?
← →
Юрий Зотов © (2008-09-14 20:28) [7]
procedure TForm1.FormDblClick(Sender: TObject);
begin
SendMessage(StatusBar1.Handle, SB_SETTEXT, 4, Integer("Time is " + TimeToStr(Time)))
end;
Все прекрасно работает (D7). Видимо, Вы не так приводите тип. Попробуйте:Integer(PChar(строка))
← →
{RASkov} © (2008-09-14 20:54) [8]> [7] Юрий Зотов © (14.09.08 20:28)
> Все прекрасно работает (D7).
Я тоже попробывал... В своем приложении(где СтатусБар и где СендМессадж) - работает.
А если в [0]
> Есть программа (чужая).
- то не работает.
Нужно наверное почитать про SB_SETTEXT...
← →
Alexandr_5 (2008-09-14 20:56) [9]procedure TForm1.FormDblClick(Sender: TObject);
begin
SendMessage(StatusBar1.Handle, SB_SETTEXT, 4, Integer("Time is " + TimeToStr(Time)))
end;
Действительно прекрасно работает... D6
Но
stb := FindWindowEx(chat_hwnd, 0, "TStatusBar", nil);
if stb <> 0 then
begin
sendmessage(stb, SB_SETTEXT, 4, Integer("Time is " + TimeToStr(Time)));
end;
не выводит вообще ничего, а Integer(PChar(строка)) выводит какую-то ересь.
Может окно, куда я пытаюсь текст засунуть какое-то необычное?)
← →
{RASkov} © (2008-09-14 21:10) [10]> [9] Alexandr_5 (14.09.08 20:56)
> Может окно, куда я пытаюсь текст засунуть какое-то необычное?)
Да нет, скорее всего строка уже "не живая" туда попадает.... Прочитай про SB_SETTEXT.... Мне, честно, неохота... т.е. там на англ(где я нашел), а я с ним не в ладах :(
← →
Alexandr_5 (2008-09-14 21:48) [11]http://www.frolov-lib.ru/books/bsp/v22/ch2_2.html
SB_SETTEXT
Запись текста в заданную область окна Statusbar.
wParam = (WPARAM) iPart | uType; // область и тип отображения
lParam = (LPARAM) (LPSTR) szText; // адрес строки
Через параметр iPart передается номер области. Этот номер может комбинироваться при помощи логической операции ИЛИ с одной из нескольких констант, описанной нами ранее в разделе " Запись текста в область Statusbar".
Через параметр szText передается адрес строки текста. Если используется константа SBT_OWNERDRAW, параметр сообщения lParam служит для передачи произвольного 32-разрядного значения, например, идентификатора битового изображения.
Попробовал передать адрес строки... все равно фигню выводит.
← →
Юрий Зотов © (2008-09-15 00:34) [12]Хех... забыл, что программа чужая.
По всей видимости, статусбар берет текст в СВОЕМ адресном пространстве - а там, естественно, лежит мусор.
Как с этим бороться - шут его знает.
← →
Palladin © (2008-09-15 02:31) [13]) внедряться в ЧАП и того... да на кой это вообще... на свете куча задач куда интересней...
← →
Германн © (2008-09-15 02:44) [14]
> Palladin © (15.09.08 02:31) [13]
>
> ) внедряться в ЧАП
Хм. А что такое ЧАП?
← →
{RASkov} © (2008-09-15 02:46) [15]> [14] Германн © (15.09.08 02:44)
Может - Чужое Адресное Пространство :)
← →
Германн © (2008-09-15 03:00) [16]
> {RASkov} © (15.09.08 02:46) [15]
>
> > [14] Германн © (15.09.08 02:44)
>
> Может - Чужое Адресное Пространство :)
Тогда пусть Тимур мне платит. :)
← →
KilkennyCat © (2008-09-15 03:01) [17]Частное Адресное Пространство
Человеческая Анемичная Попа
Чудовищно Аннигилирующий Палец
← →
Германн © (2008-09-15 03:09) [18]
> KilkennyCat © (15.09.08 03:01) [17]
Ух и сколько убитых енотов мне отсудят! Тимур просто по миру пойдёт.
:)
← →
Германн © (2008-09-15 03:13) [19]Розыч. При возможности убери наш флуд.
:)
← →
KilkennyCat © (2008-09-15 07:40) [20]
> Тимур просто по миру пойдёт.
Я бы тоже хотел попутешествовать... отдохнуть где-нить....
← →
Palladin © (2008-09-15 11:04) [21]ну епта... не успел проснутся, а уже платить... ну что за мир )
← →
Anatoly Podgoretsky © (2008-09-15 11:16) [22]> Германн (15.09.2008 3:00:16) [16]
За Чужое Адресное Пространство платить надо лично.
Страницы: 1 вся ветка
Текущий архив: 2008.10.19;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.006 c