![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Sendmessage на TStatusbar
Alexandr_5 © (2008-09-13 10:54:00)Добрый всем день. Суть проблемы в следующем. Есть программа (чужая). По клику кнопки мне нужно вывести некоторый текст на статусбар этой программы. Вывода текста я добился в принципе, только осталась небольшая проблема, которую решить не могу никак: у меня текст выводится только в 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;
Anatoly Podgoretsky (2008-09-15 11:16:00) [1]> Германн (15.09.2008 3:00:16) [16]
За Чужое Адресное Пространство платить надо лично.
Palladin (2008-09-15 11:04:00) [2]ну епта... не успел проснутся, а уже платить... ну что за мир )
KilkennyCat (2008-09-15 07:40:00) [3]
> Тимур просто по миру пойдёт.
Я бы тоже хотел попутешествовать... отдохнуть где-нить....
Германн (2008-09-15 03:13:00) [4]Розыч. При возможности убери наш флуд.
:)
Германн (2008-09-15 03:09:00) [5]
> KilkennyCat © (15.09.08 03:01) [17]
Ух и сколько убитых енотов мне отсудят! Тимур просто по миру пойдёт.
:)
KilkennyCat (2008-09-15 03:01:00) [6]Частное Адресное Пространство
Человеческая Анемичная Попа
Чудовищно Аннигилирующий Палец
Германн (2008-09-15 03:00:00) [7]
> {RASkov} © (15.09.08 02:46) [15]
>
> > [14] Германн © (15.09.08 02:44)
>
> Может - Чужое Адресное Пространство :)
Тогда пусть Тимур мне платит. :)
{RASkov} (2008-09-15 02:46:00) [8]> [14] Германн © (15.09.08 02:44)
Может - Чужое Адресное Пространство :)
Германн (2008-09-15 02:44:00) [9]
> Palladin © (15.09.08 02:31) [13]
>
> ) внедряться в ЧАП
Хм. А что такое ЧАП?
Palladin (2008-09-15 02:31:00) [10]) внедряться в ЧАП и того... да на кой это вообще... на свете куча задач куда интересней...
Юрий Зотов (2008-09-15 00:34:00) [11]Хех... забыл, что программа чужая.
По всей видимости, статусбар берет текст в СВОЕМ адресном пространстве - а там, естественно, лежит мусор.
Как с этим бороться - шут его знает.
Alexandr_5 (2008-09-14 21:48:00) [12]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-разрядного значения, например, идентификатора битового изображения.
Попробовал передать адрес строки... все равно фигню выводит.
{RASkov} (2008-09-14 21:10:00) [13]> [9] Alexandr_5 (14.09.08 20:56)
> Может окно, куда я пытаюсь текст засунуть какое-то необычное?)
Да нет, скорее всего строка уже "не живая" туда попадает.... Прочитай про SB_SETTEXT.... Мне, честно, неохота... т.е. там на англ(где я нашел), а я с ним не в ладах :(
Alexandr_5 (2008-09-14 20:56:00) [14]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 20:54:00) [15]> [7] Юрий Зотов © (14.09.08 20:28)
> Все прекрасно работает (D7).
Я тоже попробывал... В своем приложении(где СтатусБар и где СендМессадж) - работает.
А если в [0]
> Есть программа (чужая).
- то не работает.
Нужно наверное почитать про SB_SETTEXT...
Юрий Зотов (2008-09-14 20:28:00) [16]
procedure TForm1.FormDblClick(Sender: TObject);
begin
SendMessage(StatusBar1.Handle, SB_SETTEXT, 4, Integer('Time is ' + TimeToStr(Time)))
end;
Все прекрасно работает (D7). Видимо, Вы не так приводите тип. Попробуйте:
Integer(PChar(строка))
Alexandr_5 (2008-09-14 18:48:00) [17]Действительно не совпадают, но от этого легче не становится. В хелпе написано
SB_SETTEXT
wParam = (WPARAM) iPart | uType;
lParam = (LPARAM) (LPSTR) szText;
не понимаю, почему sendmessage(stb,SB_SETTEXT,4,lparam(lpstr('текст')));
всякую чушь выводит на статусбар.
В интернете вообще преобразовывают непонятно..
Куда мне копать?
Palladin (2008-09-14 17:54:00) [18]а кто сказал что параметры WM_SETTEXT и SB_SETTEXT совпадают?
Alexandr_5 (2008-09-14 17:42:00) [19]Спасибо, нашел.
Только теперь не пойму: почему
sendmessage(stb,WM_SETTEXT,4,lparam(lpctstr('текст')));
нормально на статусбар ставит слово "текст", а
sendmessage(stb,SB_SETTEXT,4,lparam(lpctstr('текст')));
какой-то невменяемый текст пишет. Как надо преобразовывать?
В интернете поискал, там только integer(pchar('...')), что в принципе одно и то же lparam(lpctstr('...'))..
{RASkov} (2008-09-14 12:32:00) [20]> [2] Alexandr_5 (14.09.08 12:30)
Сделай поиск по этому слову в директории с VCL.... прямо в делфи и сделай.