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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2015, 15:42   #21
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
На сколько помню, GR32 успешно справляется с таким кол-вом компонентов.
Особенно при наличии компонента, умеющего накладывать на базовое изображение слои. Таким образом проблема сама себя решает с любым кол-во изображений. Хотя я с 400 шт. не пробовал )
Специально решил попробовать:
500 слоёв.
Аналогичные тормоза при перемещении.
Не важно какого класса TCustomLayer, TBitmapLayer, TRotLayer ... etc
/////////////////////////////////////////////////////////////////////////////////////
Если создать мало слоёв, то всё шустренько таскается мышью,

Код:
unit MainUnit;

interface

//{$I GR32.inc}

uses
  SysUtils, Windows,Classes, Graphics, Messages, Controls, Forms, Dialogs,
  StdCtrls, GR32, GR32_RotLayer, ComCtrls, jpeg, GR32_Image;

type
  TFormRotLayer = class(TForm)
    ImgView: TImgView32;
    Button4: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button4Click(Sender: TObject);

    procedure LMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure LMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure LMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  public
    L: array [1..500] of TRotLayer;
    LayerList  : TList;
  private
   MX, MY   : integer;
   Pushed   : boolean;
   CurLayer :  integer;
  end;

var
  FormRotLayer: TFormRotLayer;

implementation

{$R *.dfm}


procedure TFormRotLayer.FormCreate(Sender: TObject);
begin
  ImgView.Bitmap.LoadFromFile('Back.jpg');
  LayerList := TList.Create;
end;

/////////////////////////////////////////////////////

procedure TFormRotLayer.LMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
P: TFloatPoint;
begin

  if Button = mbLeft then
    begin
    Pushed := true;
    CurLayer := TRotLayer(Sender).Index;
    //TRotLayer(Sender).BringToFront;
    P := TRotLayer(Sender).Position;
    MX := X - Round(P.X);
    MY := Y - Round(P.Y);
    Label1.Caption := IntToStr(CurLayer+1);
    end;
end;

/////////////////////////////////////////////////////

procedure TFormRotLayer.LMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbLeft then
 Pushed := false;
end;

////////////////////////////////////////////////////

procedure TFormRotLayer.LMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
   if ssLeft in Shift then
   begin
      if Pushed then
      begin
      TRotLayer(LayerList.Items[CurLayer]).Position := FloatPoint(X - MX , Y - MY );
      end;
   end;
end;

///////////////////////////////////////////////////

procedure TFormRotLayer.Button4Click(Sender: TObject);
var
 i: Cardinal;
begin
  for i:=1 to 500 do
  begin

   L[i] := TRotLayer.Create(ImgView.Layers);
   L[i].Bitmap.LoadFromFile('Pict.jpg');
   L[i].Position := FloatPoint(Random(ImgView.Width-L[i].Bitmap.Width), Random(ImgView.Height-L[i].Bitmap.Height));
   L[i].MouseEvents := True;
   L[i].OnMouseMove := LMouseMove;
   L[i].OnMouseDown := LMouseDown;
   L[i].OnMouseUp   := LMouseUp;

    if  Assigned( LayerList ) then
    LayerList.Add(TObject(L[i]));

  end;

end;

procedure TFormRotLayer.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
    if  Assigned( LayerList ) then
    FreeAndNil(LayerList);
end;

end.

Последний раз редактировалось Тоба; 11.10.2015 в 15:44.
Тоба вне форума Ответить с цитированием
Старый 11.10.2015, 16:34   #22
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Аналогичные тормоза при перемещении.
Я бы на твоем месте не работал с компонентами... Уж лучше обрабатывать OnPaint отрисовывая некую канву, служащую буфером, на которой будут рисоваться изменения в положении паззлов при попытке их перемещения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.10.2015, 17:03   #23
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию

Это я уже понял.
Как раз этим сейчас и занимаюсь.
Камень на камне(подводные).Фаски, тени, антиалайзинг, призрак с динамической прозрачностью, повороты, общий фон канвы(текстура или Solid),пропорциональное масштабирование при ресайзе формы...
Танцую с бубном вокруг TGPBitmap и TВitmap32.
Тоба вне форума Ответить с цитированием
Старый 11.10.2015, 20:16   #24
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

тогда под вашу задачу нужно действительно что-то уж совсем "своё".
Рекомендую смотреть с сторону GDI+, или же OpenGL, DirectX. Простой канвас вам тут не помощник, с такими-то объёмами информации.
Человек_Борща вне форума Ответить с цитированием
Старый 11.10.2015, 20:18   #25
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
или же OpenGL, DirectX
О! Кстати. Очень даже да. Или FireMonkey если хочется рапида.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.10.2015, 20:35   #26
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию

GDI+ и GR32 прекрасно со всем этим справляется, просто очень много волокиты и времени надо
Тоба вне форума Ответить с цитированием
Старый 11.10.2015, 23:45   #27
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А если при онклик на картину написать:

image.doublebufEred:=true;?

А при отпускании кнопки-ложь?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 12.10.2015, 02:49   #28
Тоба
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 86
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
А если при онклик на картину написать:
image.doublebufEred:=true;?
А при отпускании кнопки-ложь?
А вы сами попробуйте написать, заодно узнаете - присуще ли данное свойство классу TImage.
Тоба вне форума Ответить с цитированием
Старый 12.10.2015, 09:43   #29
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Цитата:
Или FireMonkey если хочется рапида.
...Если хочется странного. FM у меня так и не заработал, под Windows 8.1 да из коробочных Demo в составе XE8. Скомпилировал, вижу что при движении окна все мигает гирляндой, закрыл, дальше не использую новомодную фигню.

Цитата:
А если при онклик на картину написать:

image.doublebufEred:=true;?

А при отпускании кнопки-ложь?
Свойство то есть, проблема в том что TImage не справится с таким объемом инфы. А GR32 ничего графического от delphi и не берут в принципе, там все самописное.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мерцание панельки, при перемещении. stalker1995s Общие вопросы Delphi 12 04.08.2013 15:04
Много TImage bunukar Помощь студентам 13 12.04.2011 11:31
Перезапись при копировании/перемещении Shouldercannon Общие вопросы Delphi 4 12.09.2010 02:32
Моргает label при перемещении Maxs Компоненты Delphi 21 26.11.2009 19:57
Процедура при перемещении формы Alex Cones Общие вопросы Delphi 7 28.07.2009 09:11