Просмотр полной версии : Изменить програмно вид кнопки меню Пуск (Delphi)
Exile1985
24.04.2007, 11:07
Привет
Люди, подскажите плиз как мона изменить програмно (с помощью Delphi) вид кнопки меню Пуск.
Нашел один способ с помощью которого это можно сделать, но он работает только под Windows 9x, вот код:
procedure TForm1.FormCreate(Sender: TObject);
begin
StartBtnWnd:=FindWindow('Shell_TrayWnd', nil);
StartBtnBmp:=FindWindowEx(StartBtnWnd, 0, 'Button', nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(StartBtnBmp, BM_SetImage, 0, Image1.Picture.Bitmap.Handle);
end;
Большая просьба отвечать только по теме и ответы типа "ресторатор в руки" прошу оставить при себе,
не знаете - не пишите, извиняюсь за грубость просто уже достали тупыми ответами и флудом.
Заранее благадарю.
p.s. если реально поможежете обещаю + :)
Exile1985
24.04.2007, 14:27
АУУУУ народ, че тишина то такая, тупой вопрос задал или это не осуществимо?
Нашел пример в Delphi Russian Knowledge Base form Vit
Пример из серии "Что можно сделать с рабочим столом". В общем, это обычный трюк с кнопкой "Пуск" (Start).
{ объявляем глобальные переменные }
var
Form1: TForm1;
StartButton: hWnd;
OldBitmap: THandle;
NewImage: TPicture;
{ добавляем следующий код в событие формы OnCreate }
procedure TForm1.FormCreate(Sender: TObject);
begin
NewImage := TPicture.create;
NewImage.LoadFromFile('C:\Windows\Circles.BMP');
StartButton := FindWindowEx
(FindWindow(
'Shell_TrayWnd', nil),
0,'Button', nil);
OldBitmap := SendMessage(StartButton,
BM_SetImage, 0,
NewImage.Bitmap.Handle);
end;
{ Событие OnDestroy }
procedure TForm1.FormDestroy(Sender: TObject);
begin
SendMessage(StartButton,BM_SetImage,0,OldBitmap);
NewImage.Free;
end;
PS: Еще тут (http://www.delphisources.ru/pages/faq/desktop.html) посматри...
Exile1985
24.04.2007, 15:28
будем пробовать, хотя смахивает на мой :), спасибо за помощь, с меня +
alextoun
24.04.2007, 15:46
кнопка пус это ваще то картинка.
создай какой нить Bitmap, на кнопку, учитывая размеры
Сначала объявви глобальные переменные
StartButton: hWnd;
OldBitmap: THandle;
NewImage: TPicture;Затем опиши событие по создания окна [OnCreate]:
procedure TForm1.FormCreate(Sender: TObject);
begin
NewImage := TPicture.create;
NewImage.LoadFromFile('C:\Windows\кнопка.BMP '); //здесь укажи путь к нужному файлу
StartButton := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil);
OldBitmap := SendMessage(StartButton, BM_SetImage, 0, NewImage.Bitmap.Handle);
end;
Если сделаешь это на своей машине, то можете всё восстанавливать по событию OnDestroy:
procedure TForm1.FormDestroy(Sender: TObject);
begin
SendMessage(StartButton, BM_SetImage, 0, OldBitmap);
NewImage.Free;
end;
Чё вы один и то-же код в разном форматировании копипастите, если не понятно что это одно и тоже, то нечего постить!
Темы, кстати, учимся называть. первое предупреждение
Exile1985
25.04.2007, 17:21
Темы, кстати, учимся называть. первое предупреждение
а что именно ты там не понял?, сажи я расшифрую :)
Чё вы один и то-же код в разном форматировании копипастите, если не понятно что это одно и тоже, то нечего постить!
знаю знаю что одно и тоже, из вежливости не стал просто концентрировать на этом внимание, пусть почуствует себя умным :)
Народ, вообщето если мне не изменяет память, то в XP кнопка пуск чуток отличается от 9x и с ней нельзя работать как в 9x. она имеет клас Button.
поэтому чтобы сменить текст на ней, надо просто послать сообщение WM_SETTEXT
Поэтому нужно шагать от сюда :)
Зато есть другая возможность - наложить поверх неё чтонить еще :)
типа постоянно на канвасе рисовать своё чтонить
или вообще передвинуть её, чтобы не мешала
Да.
MoveWindow(FindWindowEx(FindWindow('Shell_TrayWnd' , nil), 0, 'Button', nil),300, 0, 80, 22, true);
s := FindWindow('Shell_TrayWnd',nil);
b := FindWindowEx(s,0,'button',nil);
SetWindowText(b,'Действие АРАБЕСКИ');
SendMessage(b,WM_MOUSEMOVE,1,1);
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot