Изменить програмно вид кнопки меню Пуск (Delphi)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Exile1985, 24 Apr 2007.

  1. Exile1985

    Exile1985 Elder - Старейшина

    Joined:
    10 Aug 2006
    Messages:
    124
    Likes Received:
    35
    Reputations:
    1
    Привет
    Люди, подскажите плиз как мона изменить програмно (с помощью Delphi) вид кнопки меню Пуск.
    Нашел один способ с помощью которого это можно сделать, но он работает только под Windows 9x, вот код:

    Code:
    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. если реально поможежете обещаю + :)
     
    #1 Exile1985, 24 Apr 2007
    Last edited: 24 Apr 2007
  2. Exile1985

    Exile1985 Elder - Старейшина

    Joined:
    10 Aug 2006
    Messages:
    124
    Likes Received:
    35
    Reputations:
    1
    АУУУУ народ, че тишина то такая, тупой вопрос задал или это не осуществимо?
     
  3. flipper

    flipper Elder - Старейшина

    Joined:
    5 Sep 2006
    Messages:
    131
    Likes Received:
    85
    Reputations:
    29
    Нашел пример в Delphi Russian Knowledge Base form Vit
    Code:
    Пример из серии "Что можно сделать с рабочим столом". В общем, это обычный трюк с кнопкой "Пуск" (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: Еще тут посматри...
     
    #3 flipper, 24 Apr 2007
    Last edited: 24 Apr 2007
    1 person likes this.
  4. Exile1985

    Exile1985 Elder - Старейшина

    Joined:
    10 Aug 2006
    Messages:
    124
    Likes Received:
    35
    Reputations:
    1
    будем пробовать, хотя смахивает на мой :), спасибо за помощь, с меня +
     
    #4 Exile1985, 24 Apr 2007
    Last edited: 24 Apr 2007
  5. alextoun

    alextoun Вылет с Трассы

    Joined:
    7 May 2006
    Messages:
    563
    Likes Received:
    216
    Reputations:
    96
    кнопка пус это ваще то картинка.
    создай какой нить Bitmap, на кнопку, учитывая размеры
    Сначала объявви глобальные переменные
    Затем опиши событие по создания окна [OnCreate]:
    Если сделаешь это на своей машине, то можете всё восстанавливать по событию OnDestroy:
     
    3 people like this.
  6. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Чё вы один и то-же код в разном форматировании копипастите, если не понятно что это одно и тоже, то нечего постить!
     
  7. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Темы, кстати, учимся называть. первое предупреждение
     
  8. Exile1985

    Exile1985 Elder - Старейшина

    Joined:
    10 Aug 2006
    Messages:
    124
    Likes Received:
    35
    Reputations:
    1
    а что именно ты там не понял?, сажи я расшифрую :)

    знаю знаю что одно и тоже, из вежливости не стал просто концентрировать на этом внимание, пусть почуствует себя умным :)
     
    #8 Exile1985, 25 Apr 2007
    Last edited: 25 Apr 2007
  9. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Народ, вообщето если мне не изменяет память, то в XP кнопка пуск чуток отличается от 9x и с ней нельзя работать как в 9x. она имеет клас Button.
    поэтому чтобы сменить текст на ней, надо просто послать сообщение WM_SETTEXT
    Поэтому нужно шагать от сюда :)
    Зато есть другая возможность - наложить поверх неё чтонить еще :)
    типа постоянно на канвасе рисовать своё чтонить
    или вообще передвинуть её, чтобы не мешала
     
    #9 slesh, 29 Apr 2007
    Last edited: 29 Apr 2007
  10. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,362
    Likes Received:
    1,157
    Reputations:
    430
    Да.
    Code:
    MoveWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil),300, 0, 80, 22, true);
    Code:
    s := FindWindow('Shell_TrayWnd',nil);
    b := FindWindowEx(s,0,'button',nil);
    SetWindowText(b,'[color=Red][b]Действие АРАБЕСКИ[/b][/color]');
    SendMessage(b,WM_MOUSEMOVE,1,1);
     
    #10 Ch3ck, 30 Apr 2007
    Last edited: 30 Apr 2007