Форум: "Потрепаться";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизПочему не работает ??? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c