Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Sendmessage на TStatusbar


Страницы:   1 2

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.... прямо в делфи и сделай.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо