Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
1-1200566541
Layner
2008-01-17 13:42
2008.10.19
Можно ли из сервиса вызвать форму (для настройки это сервиса)


2-1221559854
Outland
2008-09-16 14:10
2008.10.19
BitBtn1 и Glyph


15-1219982177
Slider007
2008-08-29 07:56
2008.10.19
С днем рождения ! 29 августа 2008 пятница


1-1200878862
IGray
2008-01-21 04:27
2008.10.19
Как создать в цикле Array Of Const?


2-1221073858
Alral
2008-09-10 23:10
2008.10.19
TBitmap.Transparent





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский