Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.07;
Скачать: CL | DM;

Вниз

Почему не работает ???   Найти похожие ветки 

 
NetBreaker666 ©   (2003-03-17 23:53) [0]

У меня Win2000. Может кто на 98-х проверит:

program stchg;
uses
Windows;

var i:Integer;
t:THandle;
h,STH:THandle;

function EnumChildProc(Handle:THandle;Lp:Integer):Boolean;stdcall;
var p:PANSICHAR;
Begin
GetMEm(p,1024);
GetClassName(Handle,p,1023);
if p="Button" then Begin
STH:=handle;
Result:=False;
end else result:=true;///continue
FreeMem(p,1024);
End;



procedure OnTimer;
var S:String;
Begin
i:=(i+1) and $03;
case i of
0:s:="Пуск";
1:s:="пУск";
2:s:="пуСк";
3:s:="пусК";
end;

SetWindowText(STh,PAnsiChar(s));
//SetWindowPos(sth,HWND_BOTTOM,0,i,30,28,SWP_NOSIZE or SWP_NOZORDER);
InvalidateRect(h,nil,false);
End;

var dt:Int64;
begin

h:=FindWindow("Shell_TrayWnd","");
EnumChildWindows(h,@EnumChildProc,666);


i:=0;
dt:=-10000000;
t:=CreateWaitableTimer(nil,false,"FUBAR_START");
if not SetWaitableTimer(t,dt,25,nil,nil,true) then halt;
repeat
WaitForSingleObject(t,INFINITE);
OnTimer;
until false;

end.


(Если расскоментировать SetWindowPos(sth,HWND_BOTTOM,0,i,30,28,SWP_NOSIZE or SWP_NOZORDER); то эффек есть, но я хотел не этого :(


 
NetBreaker666 ©   (2003-03-18 19:04) [1]

Люди, плззз... откомпилити этот код под 98-ми. Все же хоц-ца понять почему под 2000-ми не работает? Может надпись "Пуск" - просто bitmap ?

(Если кто не понял, то прога с течением времени просто меняет надпись на кнопке Пуск. STH:THandle - handle кнопки пуск, H - handle tray"я). Чтоб откомпилить прогу, чохраните этот исходник как pusk.dpr и откройте дельфями.


 
Clickmaker ©   (2003-03-18 19:09) [2]

Это кнопка со стилем BS_BITMAP. Никакого Caption у нее нет. Так что придется наверно SendMessage(BM_SETIMAGE


 
NetBreaker666 ©   (2003-03-18 19:12) [3]

БУээээ... понятно, сэнкс.
Только код какой-то некрасивый выйдет :( Да и 4 битмэпа ваять неохота :(


 
Almaz ©   (2003-03-19 00:25) [4]

Как уже правильно заметили, кнопка "Пуск" действительно не имеет Caption, а лишь только Bitmap.

Насчет красивости кода :), в общем-то этот тоже не идеал, так, без обид, пару слов:
1. Ссылка на "Пуск" находится в одну строчку:
Wnd := FindWindowEx(FindWindow("Shell_TrayWnd", nil), 0, "Button", nil);
2. А зачем вам понадобился CreateWaitableTimer там, где гораздо проще применить элементарный Sleep:
repeat
OnTimer;
Sleep(5000);
until false;

К тому же Waitable Timer не релиализован в Win95 и WinNT3.XX

К тому же "ваяние" 4-х bitmap"ов не решит проблему, т.к. в WinXP, как вы знаете кнопка "Пуск" может отличаться своим видом от своих предшественниц их Win9X/NT.
Наиболее простой, но наименее зрелищный вариант, это лишить кнопку "Пуск" битмапа, а затем задавать ей заголовок, как обычно т.е.:
SetWindowLong(Wnd, GWL_STYLE, GetWindowLong(Wnd, GWL_STYLE) and not BS_BITMAP);

Более сложным вариантом будет получение текушего рисунка кнопки Bitmap := SendMessage(Wnd, BM_SETIMAGE, IMAGE_BITMAP, 0);, дальнейшая его модификация (стирания текста и наложение нового, при этом сохраняя цвет фона, т.к. он может быть изменен в WinXP) и наложение рисунка обратно
SendMessage(Wnd, BM_SETIMAGE, IMAGE_BITMAP, BitMap);

Удачи.


 
NetBreaker666 ©   (2003-03-19 19:01) [5]

Спасибо, сам знаю, что не идеал. Просто решил что-нибудь сделать по-быстрому. Этот код я ваял менее пяти минут. Waitable Timer был нужен не для этого, но потом, влом было что-то переделывать, по-этому сделал так. (Слепом,кстати, из принципа не пользуюсь) А с пуском... да, облажался. я просто сперва пробовал FindWindowEx(FindWindow("Shell_TrayWnd", ""), 0, "Button", ""); - понятное дело нифига не нашел (я постоянно с nil"ом глючу). (Я ее в первый раз в жизни искал). Щас уже сделал изменялку Bitmap"а, только фон я свой вставляю... красиво вышло.



Страницы: 1 вся ветка

Текущий архив: 2003.04.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
1-19651
Andrey Terekhov
2003-03-25 20:49
2003.04.07
Обновление работающей программы


1-19583
Кот Джин
2003-03-28 14:52
2003.04.07
Как сделать, чтобы Edit не пикал?


3-19412
sterran
2003-03-20 10:19
2003.04.07
Востановление ранее удаленных записей


14-19768
GDBoy
2003-03-20 20:50
2003.04.07
Посоветуйте, плз, на каких сайтах можно найти хорошие книги...


1-19522
kat
2003-03-26 11:09
2003.04.07
Отчет в QuickRep в ширину на 2-х страницах