Главная страница
    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.5 MB
Время: 0.006 c
15-1217581038
AndreyV
2008-08-01 12:57
2008.10.19
Мониторные наушники Sennheiser


15-1219744519
Сергей М.
2008-08-26 13:55
2008.10.19
Еще раз о граблях в глубинах Indy


15-1219872645
+koha
2008-08-28 01:30
2008.10.19
Кто занимается параллельными машинами подскажите


3-1208260163
BAX
2008-04-15 15:49
2008.10.19
Случайный выбор данных из таблицы базы


15-1219832359
Tricky
2008-08-27 14:19
2008.10.19
Починить или купить новое?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский