Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.008 c
1-19518
AlexeyMir
2003-03-26 14:30
2003.04.07
Проблемы с PChar


1-19625
Someone
2003-03-25 13:23
2003.04.07
Толщина линии Zoom a у TChart


3-19487
Zarba
2003-03-19 17:29
2003.04.07
упаковка таблицы Paradox


14-19869
handra
2003-03-21 15:36
2003.04.07
Единая база процедур и функций для Delphi


1-19538
Маркыч
2003-03-26 18:28
2003.04.07
CoolBar





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