Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема при написании компонента, на основе TCustomControl 
:(
    Опции темы
vitalio
  Дата 23.3.2010, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.7.2009

Репутация: нет
Всего: нет



Привет всем!!!
Я уже две недели мучаюсь с одной проблемой, пытался написать компонент (кнопку) на основе TCustomControl: 
Код
unit VTSButton;

interface

uses
  SysUtils, Classes, Controls,
  Windows, Graphics;

type
  TVTSButton = class(TCustomControl)
  private
    FBack: TBitMap;
    FLeaveImg: TBitMap;
    procedure LoadImg(Value: TBitMap);
  protected
  public
    constructor Create(AOWner: TComponent); override;
    destructor Destroy; override;
    procedure Paint; override;
  published
    property Image: TBitMap read FBack write LoadImg;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('VTSComponents', [TVTSButton]);
end;

{ TVTSButton }

constructor TVTSButton.Create(AOWner: TComponent);
begin
  inherited Create(AOWner);
  ControlStyle := ControlStyle - [csOpaque];
  Width := 100;
  Height := 20;
  FBack := TBitMap.Create;
  FLeaveImg := TBitMap.Create;
end;

destructor TVTSButton.Destroy;
begin
  FBack.Destroy;
  FLeaveImg.Destroy;
  inherited;
end;

procedure TVTSButton.LoadImg(Value: TBitMap);
begin
  FBack.Width := Value.Width;
  FBack.Height := Value.Height;
  BitBlt(FBack.Canvas.Handle, 0, 0, Value.Width, Value.Height,
         Value.Canvas.Handle, 0, 0, SRCCOPY);

  Width := FBack.Width;
  Height := FBack.Height;

  FLeaveImg.Width := FBack.Width;
  FLeaveImg.Height := FBack.Height;
  BitBlt(FLeaveImg.Canvas.Handle, 0, 0, FBack.Width, FBack.Height,
         FBack.Canvas.Handle, 0, 0, SRCCOPY);
end;

procedure TVTSButton.Paint;
begin
  inherited;
  BitBlt(Canvas.Handle, 0, 0, Width, Height, FBack.Canvas.Handle,
         0, 0, SRCCOPY);
end;

end.

этот исходник работает, но если в процедуре Paint попробовать вывести FleaveImg 
Код
procedure TVTSButton.Paint;
begin
  inherited;
  BitBlt(Canvas.Handle, 0, 0, Width, Height, FLeaveImg.Canvas.Handle,
         0, 0, SRCCOPY);
end;

то при запуске программы cavas моего компонента пустой, почему?
как решить данную проблему?
PM MAIL   Вверх
vitalio
Дата 26.3.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.7.2009

Репутация: нет
Всего: нет



кто-нибудь сталкивался с такой проблемой?
PM MAIL   Вверх
dvamaster
Дата 29.3.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: 3
Всего: 10



Код

  BitBlt(FBack.Canvas.Handle, 0, 0, Value.Width, Value.Height,
         Value.Canvas.Handle, 0, 0, SRCCOPY);


и

Код

  BitBlt(FLeaveImg.Canvas.Handle, 0, 0, FBack.Width, FBack.Height,
         FBack.Canvas.Handle, 0, 0, SRCCOPY);


попробуй заменить на

Код

  FBack.Assign(Value);


и

Код

  FLeaveImg.Assign(FBack);



--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
vitalio
Дата 30.3.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.7.2009

Репутация: нет
Всего: нет



я так пробовал, эффекта ноль
PM MAIL   Вверх
dvamaster
Дата 31.3.2010, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: 3
Всего: 10



тогда попробуй не API функциями, а функциями Canvas отрисовать


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
vitalio
Дата 31.3.2010, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.7.2009

Репутация: нет
Всего: нет



пробовал не чего не получилось 
PM MAIL   Вверх
RomanEEP
Дата 31.3.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 5
Всего: 8



Лучше за базовый класс взять TGraphicControl, посмотри на примере TShape
PM MAIL   Вверх
Cumshot
Дата 7.4.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.4.2010

Репутация: нет
Всего: нет



Компонент в рантайме создаешь? Попробуй ему пэрента указать VtsButton.Parent:=Form1;
PM MAIL   Вверх
Mikel
Дата 7.4.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: 1
Всего: 2



Сохрани в LoadImg свой FLeaveImg в файл и посмотри что там есть. Попробуй задать им PixelFormat.


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.