Миниатюра Windows / просмотр кадра - PullRequest
1 голос
/ 18 января 2010

Какой был бы самый простой способ сделать миниатюру, где у вас есть панель с вертикальной полосой прокрутки и матрица изображений, описывающая их связанное изображение? Я также хотел бы, чтобы если размер родительского кадра изменялся по горизонтали, матрица уменьшалась бы до необходимого количества столбцов для отображения миниатюр без горизонтальной полосы прокрутки. Я хотел бы иметь возможность перетаскивать и изменять эти эскизы. Инструментарий, в котором это написано, не имеет большого значения. Если вы знаете хороший способ сделать это с помощью MFC, это круто, Delphi / C ++ builder тоже совершенно классный. Просто какой-то родной фреймворк приложения.

Ух ты, это звучит очень похоже на то, что я прошу помощи в выполнении домашних заданий. Клянусь, это программное обеспечение для управления лазерным проектором.

Ответы [ 3 ]

3 голосов
/ 18 января 2010

Взгляните на TMS AdvSmoothImageListBox :

alt text

AFAIK, Зарегистрированные клиенты Delphi могут бесплатно загрузить компоненты TMS Smooth с веб-сайта Embarcadero. Если вы не являетесь зарегистрированным пользователем Delphi, вы можете купить коллекцию на сайте TMS.

0 голосов
/ 18 января 2010

Я не совсем уверен, что правильно вас понял, но я бы начал с рамки, содержащей изображение и его описание.Затем я бы использовал TFlowPanel для хранения экземпляров кадра.Я думаю, что не должно быть много работы для реализации перетаскивания.Однако никогда не пробовал.

Если изображений много, вам стоит обратиться к владельцу и использовать решение с двойной буферизацией, я думаю.

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

0 голосов
/ 18 января 2010

Вот отрывочный код, который я использую для отображения коллекции переменной numImages количество веб-камер.

const MaxImages = 24;

type 
 TForm1 = class(TForm)
  ...
  images: array[1..MaxImages] of TWebcamImage;
  numImages: integer;
  ....
 end;

TWebCamImage является потомком TImage с некоторыми дополнительными атрибутами, такими как адрес источника веб-камеры, имя файла для сохраненного изображения и обработчик для двойного щелчка, чтобы открыть изображение на дополнительной панели. *

Вот код, используемый для размещения изображений на панели.

procedure TForm1.ArrangeImages;
 var i, numh, numv : integer;
 const margin=2;
 begin
  case numImages of
    1: begin numh:=1; numv:=1; end;
    2: begin numh:=2; numv:=1; end;
    3: begin numh:=3; numv:=1; end;
    4: begin numh:=2; numv:=2; end;
    5,6: begin numh:=3; numv:=2; end;
    7,8: begin numh:=4; numv:=2; end;
    9: begin numh:=3; numv:=3; end;
    10: begin numh:=5; numv:=2; end;
    11,12: begin numh:=4; numv:=3; end;
    13,14,15: begin numh:=5; numv:=3; end;
    16: begin numh:=4; numv:=4; end;
    17,18,19,20: begin numh:=5; numv:=4; end;
    else begin numh:=6; numv:=4; end;
  end;
  for i:=1 to numImages do 
   begin
    images[i].Width := (panel2.Width div numh) - margin * 2;
    images[i].Height := (panel2.Height div numv) - margin * 2;
    images[i].Top := (((i-1) div numh) * (panel2.Height div numv)) + margin;
    images[i].Left := (((i-1) mod numh) * (panel2.Width div numh)) + margin;
   end;
 end;

этот метод вызывается при инициализации формы, подключается к событию oncreate и событию onresize.

procedure TForm1.FormCreate(Sender: TObject);
 begin
  ...
  numImages:=0;
  for i:=1 to maxImages do 
    begin
     imageURL:=ini.ReadString('images','imageURL'+intToStr(i),imageURLDefault);
     if imageURL<>'' then 
      begin
       inc(numimages);
       images[numImages]:=TWebCamImage.create(self,panel2,imageURL);
      end;
     ....
    end;
   ....
  ArrangeImages;
   ....
 end;

procedure TForm1.FormResize(Sender: TObject);
 begin
  ArrangeImages;
 end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...