Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.015 c
15-1220135516
Eraser
2008-08-31 02:31
2008.10.19
Системный микшер и виста + Delphi


3-1208167098
Виталий Панасенко(дом)
2008-04-14 13:58
2008.10.19
select from select в FireBird 2.0.1/2.1


15-1219338554
Sergey Masloff
2008-08-21 21:09
2008.10.19
Несколько вакансий. Москва. Delphi, Oracle. Не гуру


2-1221465868
Ruzzz
2008-09-15 12:04
2008.10.19
Какая версия Delphi официально поддерживает unicode-прилождения?


2-1221288881
Alexandr_5
2008-09-13 10:54
2008.10.19
Sendmessage на TStatusbar