Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2007, 18:33   #1
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию Иконки запущеных приложений

Доброго времени суток всем.
Сделал програму которая, подобно панели глпвного меню, отображает все запущеные окна. на каждое окно создаёться отдельная панель которая отображает название окна и хранит его хендл. Но возникла проблема - немогу отрисовать иконку этого приложения. Панели создаются "динамически", в зависимости от количества запущеных прог, и выравниваются по ширине окнапрограмы. Вот код отслеживания запущеных програм

Код:
procedure Viev;
var
  Wnd : hWnd;
  buff: array [0..127] of Char;
  i:integer;
label Panel;
begin
try
 with form1 do begin
 i:=0;
 Wnd := GetWindow(Handle, gw_HWndFirst);
 while Wnd <> 0 do
  begin {Hе показываем:}
   if (Wnd <> Application.Handle) and {-Собственное окно}
      IsWindowVisible(Wnd) {-Hевидимые окна} and
 {     (GetWindow(Wnd, gw_Owner) = 0) and {-Дочернии окна}
      (GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
    then 
Panel:if Components[i] is TPanel
       then begin
        TPanel(Components[i]).Visible:=True;
        TPanel(Components[i]).Caption:=' '+StrPas(buff);
        TPanel(Components[i]).Hint:=StrPas(buff);
        TPanel(Components[i]).Tag:=Wnd;
        i:=i+1;
       end
       else begin
        i:=i+1;
        goto Panel;
       end;
   Wnd := GetWindow(Wnd, gw_hWndNext);
  end;
 for i:=i to ComponentCount-1 do
  if Components[i] is TPanel then
   TPanel(Components[i]).Visible:=False;
 end;
except;
end;
end;
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Viev;
end;
подскажыте пожалуста как сделать чтобы на панелях еще и иконки приложений отображались перед каптионом. Заранее пасиба
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось rpy3uH; 13.01.2009 в 16:53.
Ntlegend вне форума Ответить с цитированием
Старый 14.05.2007, 22:03   #2
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Создаешь внутри панельки TImage и загружаешь в него иконку по хендлу, который можно определить так:
Код:
uses ShellAPI;

var
 icon: hIcon;
...
Icon:=ExtractIcon(hInstance,'name.exe',0);
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Старый 16.05.2007, 13:00   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

если я не ошибаюсь Icon:=ExtractIcon(hInstance,'name.e xe',0) "изимает" иконки из самх *.ехе, но для этого нада еще и искать путь к файлу, это все время забирает

DrawIconEx(Image1.Canvas.Handle, 0,0,CopyIcon(GetClassLong(Handle, GCL_HICON )), 16, 16, 0, 0, DI_NORMAL); впринципе подходит, но не делает прозрачным фон и не у всех окон берет иконку
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 19.05.2007, 15:29   #4
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

подскажите в что здесь не так:

f
Код:
unction IconLab(Parent:TWinControl): HDC;
begin
IconLabel:=TLabel.Create(Form1);
IconLabel.Parent:=Parent;
IconLabel.Top:=3;
IconLabel.Left:=2;
IconLabel.Height:=24;
IconLabel.Width:=24;
IconLab:=IconLabel.Canvas.Handle;
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
DrawIconEx(Label4.Canvas.Handle, 0,0,CopyIcon(GetClassLong(Panel5.Tag, GCL_HICON )), 24, 24, 0, 0, DI_NORMAL);
DrawIconEx(IconLab(Form1.Panel1), 0,0,CopyIcon(GetClassLong(Panel5.Tag, GCL_HICON )), 24, 24, 0, 0, DI_NORMAL);
end;
картинка отображается только та которая рисуется на статическом елементе, а на динамически созданом нету, или если возможно скажіте как рисовать прямо на TPanel??
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось rpy3uH; 13.01.2009 в 16:53.
Ntlegend вне форума Ответить с цитированием
Старый 19.05.2007, 22:50   #5
Demi
Пользователь Подтвердите свой е-майл
 
Аватар для Demi
 
Регистрация: 28.03.2007
Сообщений: 52
По умолчанию

DrawIconEx(GetDC(Panel1.Handle), 0,0,application.Icon.Handle, 24, 24, 0, 0, DI_NORMAL);
Легко...
Кстати - DrawIconEx - рисует с прозрачным фоном да ещё и альфа-канал использует...
GLEngine2D - сайт проекта
FreeRating Cайт нашей команды
Demi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иконки Killbrum Свободное общение 9 18.08.2008 01:00
Иконки Патрон Общие вопросы Delphi 4 01.04.2008 14:07
Бегают иконки [The]Unknown Помощь студентам 2 29.11.2007 19:28
Иконки vicvtor Софт 5 31.05.2007 21:45
иконки MAcK Общие вопросы Delphi 1 17.11.2006 15:56