Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как избежать пропадания значка?


Автор: Егор (к сожалению, не Летов) 28.8.2002, 02:43
Здравствуйте ещё и ещё.

Как избежать пропадания значка, нарисованного на TabSheet3 компонента ТPageControl, после переключения вкладок, свертывания/развертывания окна и т.п?

Код
procedure LoadIcon(Module: String; Number: word);
var
CanCntr: TControlCanvas;
begin
CanCntr := TControlCanvas.Create;
CanCntr.Control := Form1.TabSheet3; //Третья вкладка PageControl1
DrawIcon(CanCntr.Handle, 10, 10, ExtractIcon(HInstance, PChar(Module), Number));
end;

//Вызов
LoadIcon('pfdimg.dll', 8);


Была у меня ещё такая идея:
Рисую прямо в ТImage.

Код
{$IFDEF WIN32}
const BadDllLoad = 0;
{$ELSE}
const BadDllLoad = 32;
{$ENDIF}

//Загрузка курсора из DLL
procedure LoadIconfromDLL(TheHDC:hDC; Number: word);
var
h, r: cardinal;
begin
h := LoadLibraryA('pfdimg.dll');
 if h <= BadDllLoad then Exit else
 begin
  r := ExtractIcon(h, 'pfdimg.dll', Number);
  DrawIcon(TheHDC, 0, 0, r);
  FreeLibrary(h);
 end;
end;

//Вызов
LoadIconfromDLL(Image2.Canvas.Handle, 8);


Последняя работает лучше, но пока вкладки не переключишь значёк не появиться. Image2 расположен на вкладке TabSheet3 компонента ТPageControl. И прорисовываеться значок не очень красиво когда в Image2 уже есть рисунок. Что-то с прозрачностью. Рисунок должен находиться в Image2, так задумано, а поверх него загружаеться значок.

:baaa

Автор: Vit 28.8.2002, 03:30
Тебе надо определить события по перерисовке компонента, иначе твоя программа просто "не знает" что при перерисовке компонента надо перерисовывать Canvas примененным тобой методом

Автор: Егор (к сожалению, не Летов) 28.8.2002, 03:59
Теория - хорошо, но практика - круче.
Можно пример, хоть какой-нибудь?

Автор: Vit 28.8.2002, 05:38
Тут у тебя как раз теории не хватает - читни где-нибудь: как и кто перерисовывает окно и его элементы при манипуляциях с ним...

Автор: Егор (к сожалению, не Летов) 28.8.2002, 15:39
Цитата
читни где-нибудь: как и кто перерисовывает окно и его элементы при манипуляциях с ним...


Скажи где, читну. :angry:

Автор: Alex 28.8.2002, 16:22
Хотябы в справке по Delphi

Автор: Vit 28.8.2002, 23:53
Проще всего включить прорисовку на событие onPaint только будь осторожен - это событие вызывается очень часто, поэтому операция должна быть максимально простая.

Автор: Song 29.8.2002, 22:08
TPageControl.onDrawTab ?

Автор: Егор (к сожалению, не Летов) 31.8.2002, 22:48
А где ты видел у ТPageControl  -  onPaint ???

Автор: Song 1.9.2002, 14:54
Самому сделать надо.

Автор: Егор (к сожалению, не Летов) 1.9.2002, 18:01
Как сделать? Есть пример?

Автор: Song 2.9.2002, 02:45
Type MyPageControl=class(TPageControl)
...
End;

Автор: Vit 4.9.2002, 04:37
Вообще-то я имел ввиду onPaint событие формы, можно попробовать и предложение Song (TPageControl.onDrawTab) только боюсь что не всегда будет работать, самому писать событие для TPageControl конечно занятие увлекательное, но если этот TPageControl занимает больше 80% площади формы, то особой выгоды в этом я не вижу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)