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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> фон в VirtualDrawTree и jpg, png, gif, Отображается только TBitmap 
:(
    Опции темы
nuker
Дата 29.1.2007, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



так работает:  VT.Background.loadFromFile('image.bmp')
так нет:  VT.Background.loadFromFile('image.png')
и так нет:  VT.Background.loadFromFile('image.jpg')
и так нет:  VT.Background.loadFromFile('image.gif')
и даже так нет:  VT.Background.loadFromFile('image.ico')

посмотрел в реализации компонента, действительно он отрисовывает только TBitmap,
хотя свойство  FBackground: TPicture;

Кто с этим сталкивался? может у меня версия старая?
можно ли решить проблему через OnPaintBackground, непереписывая код компонента.
PM MAIL   Вверх
Bose
Дата 29.1.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



да. Для поддержки Jpg надо добавить в uses часть модуль jpeg, а для поддержки png и gif, установить соответствующие модули и подключить их.


PM MAIL WWW Skype   Вверх
nuker
Дата 29.1.2007, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Bose @ 29.1.2007,  10:33)
да. Для поддержки Jpg надо добавить в uses часть модуль jpeg, а для поддержки png и gif, установить соответствующие модули и подключить их.

а ты попробуй, я же не просто так спрашиваю наверно.
PM MAIL   Вверх
Romikgy
Дата 29.1.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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





--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
nuker
Дата 29.1.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Romikgy @ 29.1.2007,  17:54)
http://www.delphi-gems.com/GraphicEx.php

jpeg поддерживается итак, еще подключен pngimage и pngComponents.
Накой мне GraphicEx сдался?

смотри где проблема (точнее одна из проблем):
Код

procedure TBaseVirtualTree.StaticBackground(Source: TBitmap; Target: TCanvas; Offset: TPoint; R: TRect);
// Draws the given source graphic so that it stays static in the given rectangle which is relative to the target bitmap.
// The graphic is aligned so that it always starts at the upper left corner of the target canvas.
// Offset gives the position of the target window as a possible superordinated surface.

const  DST = $00AA0029; // Ternary Raster Operation - Destination unchanged
var
  PicRect: TRect;
  AreaRect: TRect;
  DrawRect: TRect;

begin
  // clear background
  Target.Brush.Color := Color;
  Target.FillRect(R);

  // Picture rect in relation to client viewscreen.
  PicRect := Rect(FBackgroundOffsetX, FBackgroundOffsetY, FBackgroundOffsetX + Source.Width, FBackgroundOffsetY + Source.Height);

  // Area to be draw in relation to client viewscreen.
  AreaRect := Rect(Offset.X + R.Left, Offset.Y + R.Top, Offset.X + R.Right, Offset.Y + R.Bottom);

  // If picture falls in AreaRect, return intersection (DrawRect).
  if IntersectRect(DrawRect, PicRect, AreaRect) then
  begin
    // Draw portion of image which falls in canvas area.
    if Source.Transparent then
    begin
      // Leave transparent area as destination unchanged (DST), copy non-transparent areas to canvas (SRCCOPY).
      with DrawRect do
        MaskBlt(Target.Handle, Left - Offset.X, Top - Offset.Y, (Right - Offset.X) - (Left - Offset.X),
          (Bottom - Offset.Y) - (Top - Offset.Y), Source.Canvas.Handle, Left - PicRect.Left, DrawRect.Top - PicRect.Top,
          Source.MaskHandle, Left - PicRect.Left, Top - PicRect.Top, MakeROP4(DST, SRCCOPY));
    end
    else
    begin
      // copy image to destination
      with DrawRect do
        BitBlt(Target.Handle, Left - Offset.X, Top - Offset.Y, (Right - Offset.X) - (Left - Offset.X),
          (Bottom - Offset.Y) - (Top - Offset.Y) + R.Top, Source.Canvas.Handle, Left - PicRect.Left, DrawRect.Top - PicRect.Top,
          SRCCOPY);
    end;
  end;
end;


усвоил? никакие GraphicEx тут непомогут. либо править компонент,
либо по событию OnPaintBackground рисовать(что у меня невышло).

Это сообщение отредактировал(а) nuker - 29.1.2007, 23:41
PM MAIL   Вверх
Romikgy
Дата 29.1.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(nuker @  29.1.2007,  22:37 Найти цитируемый пост)
Накой мне GraphicEx сдался?

это тебе решать мое дело предложить , и сделал я это после этого
Цитата(nuker @  29.1.2007,  05:18 Найти цитируемый пост)
так работает:  VT.Background.loadFromFile('image.bmp')
так нет:  VT.Background.loadFromFile('image.png')
и так нет:  VT.Background.loadFromFile('image.jpg')
и так нет:  VT.Background.loadFromFile('image.gif')
и даже так нет:  VT.Background.loadFromFile('image.ico')

не подходит не бери!
Цитата(nuker @  29.1.2007,  22:37 Найти цитируемый пост)
усвоил? 

а это при себе оставь плз
Цитата(nuker @  29.1.2007,  22:37 Найти цитируемый пост)
либо править компонент,
либо по событию OnPaintBackground рисовать

правь , рисуй твое занятие


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
nuker
Дата 30.1.2007, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Romikgy @ 29.1.2007,  21:43)
это тебе решать мое дело предложить , и сделал я это после этого
Цитата(nuker @  29.1.2007,  05:18 Найти цитируемый пост)
так работает:  VT.Background.loadFromFile('image.bmp')
так нет:  VT.Background.loadFromFile('image.png')
и так нет:  VT.Background.loadFromFile('image.jpg')
и так нет:  VT.Background.loadFromFile('image.gif')
и даже так нет:  VT.Background.loadFromFile('image.ico')

и как? .png c прозрачностью на фоне рисуется?

Цитата(Romikgy)
не подходит не бери!

Неподходит.
Последняя официальная версия аж от 2003 года и судя по ньюсгруппе (да и сам пробовал обновлять), если качать с SVN, у всех проблемы возникают.

Цитата(Romikgy)
правь , рисуй твое занятие

Я за помощью пришел на форум.

Это сообщение отредактировал(а) nuker - 30.1.2007, 02:54
PM MAIL   Вверх
nuker
Дата 30.1.2007, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот еще кусок кода из VT
Код

     if (toShowBackground in FOptions.FPaintOptions) and (FBackground.Graphic is TBitmap) then
     ...

теперь понятно? (FBackground.Graphic is TBitmap)
каким образом тут будет отрисовываться png? хоть сколько библиотек наподключай.
я же спросил (кто с этим сталкивался?)
если я кого-то оскорбил, извиняюсь.
PM MAIL   Вверх
CatATonik
Дата 30.1.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



По моему явное недопонимание, человек хочет нарисовать например PNG, а VirtualTree рисует только TBitmap (это так и есть). Поэтому какие библиотеки вы не подключайте он все равно не будет рисовать ничего кроме TBitmap. Конечно можно запихнуть любой формат в Bitmap (Assign), но если это PNG, например, он не будет рисовать альфа канал. Так что напрасно набросились на человека.

Только неопнятно Nuker ты же сам написал про OnPaintBackground, вот там и рисуй. Я не вижу проблем.
PM MAIL   Вверх
Bose
Дата 30.1.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(nuker @  29.1.2007,  19:17 Найти цитируемый пост)
а ты попробуй, я же не просто так спрашиваю наверно.


Да, действительно. smile

Ну так правь исходник, либо рисуй в OnPaintBackground  smile 

PM MAIL WWW Skype   Вверх
nuker
Дата 30.1.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Bose @  30.1.2007,  11:27 Найти цитируемый пост)
либо рисуй в OnPaintBackground

вот и подскажи.
там обычно черный фон идет, но EraseBackground помог + FillRect
все вроде пучком, но перекрывающие ноды закрашивают фон, если посмотреть сорцы, то становится понятно, что используется другая отрисовка.
я сижу на 7семерке, - версия дерева(4.4.17).

Добавлено @ 19:59 
CatATonik Спасибо за саппорт.
Цитата(CatATonik @  30.1.2007,  09:13 Найти цитируемый пост)
ты же сам написал про OnPaintBackground, вот там и рисуй. Я не вижу проблем. 
 Именно, но как выше сказано есть трабла с перекрытием.


Это сообщение отредактировал(а) nuker - 30.1.2007, 20:01
PM MAIL   Вверх
CatATonik
Дата 31.1.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, там действительно тяжелый случай. Впринципе можно отрисовывать в OnPaintBacground и в BeforeItemErase соответсвующий кусок, но я не уверен что все равно всегда все будет правильно работать.

Может все таки рисовать битмап? Если, как я понимаю, нужно давать пользователю возможность выбрать картинку, то примерно так:

Код

procedure LoadBackground(const FileName: string);
var
  Bitmap: TBitmap;
  Picture: TPicture;
begin
  Bitmap := TBitmap.Create;
  Picture := TPicture.Create;
  try
    Picture.LoadFromFile(FileName);
    Bitmap.Width := Picture.Width;
    Bitmap.Height := Picture.Height;
    Bitmap.Canvas.Bursh.Color := MyTree.Color;
    Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));
    Bitmap.Canvas.Draw(0, 0, Picture.Graphic);
    MyTree.Background.Graphic := Bitmap;
  finally
    Bitmap.Free;
    Picture.Free;
  end;
end;


PM MAIL   Вверх
nuker
Дата 31.1.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



CatATonik
точно, пнг прозрачно отрисуется на нужном фоне, но останется проблема, если пользователь сменит тему оформления и цвет clWindow изменится, то придется снова проделать эту операцию,
но это можно решить через системные события, так-что решение вполне живое, спасибо.
Все проще оказалось, а я уже сорцы дерева правил.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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