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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2017, 00:37   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Перерисовка TImage

Всем привет. На форме есть StatusBar, на нем есть TImage.


Unit1
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls,
  System.ImageList, Vcl.ImgList, Unit2;

type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    Button1: TButton;
    Image: TCustomImage;
    ImageList1: TImageList;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Image:= TCustomImage.Create(StatusBar1);
  Image.Parent:= StatusBar1;
  Image.Height:= 15;
  Image.Width:= 15;
  Image.ImageContainer:= ImageList1;

end;

end.
Unit2
Код:
unit Unit2;

interface

uses
  System.Classes, System.SysUtils,
  Vcl.Controls, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Graphics, Vcl.StdCtrls;


type
  TCustomImage = class(TImage)
  private
    { Private declarations }
    fCurrentItem: integer;
    procedure MainClickEvent(Sender: TObject);
  public
    { Public declarations }
    ImageContainer: TImageList;
    constructor Create(AOwner: TComponent);
  end;

implementation


constructor TCustomImage.Create(AOwner: TComponent);
begin
  inherited;
  self.OnClick:= MainClickEvent;
  fCurrentItem:= -1;
  self.Transparent:=true;
end;


procedure TCustomImage.MainClickEvent(Sender: TObject);
begin

  fCurrentItem:= fCurrentItem + 1;

  if (fCurrentItem > ImageContainer.Count - 1) then
    fCurrentItem := 0;

  ImageContainer.GetIcon(fCurrentItem, self.Picture.Icon);

end;

end.

При этом при клике по картинке,она не обновляется, хотя процедура MainClickEvent срабатывает.


Обратил внимание, что TCustomImage перерисовывается только в том случаи, если изменить размер формы. Как бы это исправить ? )
-Jack- вне форума Ответить с цитированием
Старый 02.10.2017, 04:51   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Update вызвать напрямую
Black Fregat вне форума Ответить с цитированием
Старый 02.10.2017, 10:07   #3
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Код:
procedure TCustomImage.MainClickEvent(Sender: TObject);
begin

  fCurrentItem:= fCurrentItem + 1;

  if (fCurrentItem > ImageContainer.Count - 1) then
    fCurrentItem := 0;

  ImageContainer.GetIcon(fCurrentItem, self.Picture.Icon);

  self.Update;

end;
Не помогло.
-Jack- вне форума Ответить с цитированием
Старый 08.10.2017, 15:26   #4
dummy_user
Форумчанин
 
Аватар для dummy_user
 
Регистрация: 02.03.2013
Сообщений: 109
По умолчанию

ImageContainer где создаётся?
dummy_user вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перерисовка окна Gradus Win Api 2 15.04.2012 23:50
Перерисовка окна Lawliet32 Win Api 3 10.11.2011 20:54
Перерисовка Canvas MindFreak Общие вопросы Delphi 7 08.06.2010 22:50
Перерисовка в ShellListView artemavd Общие вопросы Delphi 2 04.04.2010 19:18
Перерисовка на Image SERG1980 Мультимедиа в Delphi 9 09.04.2008 10:24