Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

icq: 411118008
По умолчанию Иконки запущеных приложений

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

Код:

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 в 17:53.
Ntlegend вне форума   Ответить с цитированием
Старый 14.05.2007, 22:03   #2
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Адрес: 116км
Сообщений: 196
Репутация: 276

icq: 8611025
По умолчанию

Создаешь внутри панельки 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
Репутация: 102

icq: 411118008
По умолчанию

если я не ошибаюсь 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
Репутация: 102

icq: 411118008
По умолчанию

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

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 в 17:53.
Ntlegend вне форума   Ответить с цитированием
Старый 19.05.2007, 22:50   #5
Demi
Форумчанин
 
Аватар для Demi
 
Регистрация: 28.03.2007
Сообщений: 52
Репутация: 35

icq: 319696846
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


03:58.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru