Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Изменить програмно вид кнопки меню Пуск (Delphi) (https://forum.antichat.xyz/showthread.php?t=38747)

Exile1985 24.04.2007 11:07

Изменить програмно вид кнопки меню Пуск (Delphi)
 
Привет
Люди, подскажите плиз как мона изменить програмно (с помощью 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

АУУУУ народ, че тишина то такая, тупой вопрос задал или это не осуществимо?

flipper 24.04.2007 14:38

Нашел пример в 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: Еще тут посматри...

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;

hidden 24.04.2007 23:49

Чё вы один и то-же код в разном форматировании копипастите, если не понятно что это одно и тоже, то нечего постить!

_Great_ 25.04.2007 08:54

Темы, кстати, учимся называть. первое предупреждение

Exile1985 25.04.2007 17:21

Цитата:

Сообщение от _Great_
Темы, кстати, учимся называть. первое предупреждение

а что именно ты там не понял?, сажи я расшифрую :)

Цитата:

Сообщение от hidden
Чё вы один и то-же код в разном форматировании копипастите, если не понятно что это одно и тоже, то нечего постить!

знаю знаю что одно и тоже, из вежливости не стал просто концентрировать на этом внимание, пусть почуствует себя умным :)

slesh 29.04.2007 23:19

Народ, вообщето если мне не изменяет память, то в XP кнопка пуск чуток отличается от 9x и с ней нельзя работать как в 9x. она имеет клас Button.
поэтому чтобы сменить текст на ней, надо просто послать сообщение WM_SETTEXT
Поэтому нужно шагать от сюда :)
Зато есть другая возможность - наложить поверх неё чтонить еще :)
типа постоянно на канвасе рисовать своё чтонить
или вообще передвинуть её, чтобы не мешала

Ch3ck 30.04.2007 00:01

Да.
Код:

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);



Время: 19:26