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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2007, 05:26   #1
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию Растягивание имиджа!

Здравствуйте!У меня есть image1,и мне нужно чтобы он спокойно растягивался и сужался при помощи курсора(как окна windows).Помогите пожалуйста!
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 04.11.2007, 18:26   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Это называется масштабирование.
У имиджа есть свойства и методы к-рые позволяют это делать. Для начала нужно ознакомится с ними, разобраться какое и для чего, и попробовать сначала (временно) масштабировать по нажатию кнопки или клавиши, как тебе удобнее, чтобы убедиться что все работает. Общий принцип такой - изменяешь размеры имиджа, при этом свойство Stretched должно быть True.

А затем можно начинать пробовать привязывать это все к событиям мыши.
Как это сделать, я расскажу.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 04.11.2007 в 18:35.
mutabor вне форума Ответить с цитированием
Старый 04.11.2007, 22:06   #3
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Кнопками то получается!Но мне ведь надо чтобы с помощью мыши.Расскажи пожалуйста
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 05.11.2007, 07:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как вариант (уже такое предлагал) запихни рисунок в окно, а окно сделай дочерним по отношению другого окна, избавься от капшина, поставь рисунку Stretch и Align на Client и растягивай скок хош.
Эффект будет такой как будто ты тянеш именно картинку. (меня это однажды выручило)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.11.2007, 10:10   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Кнопками то получается!Но мне ведь надо чтобы с помощью мыши.Расскажи пожалуйста
Рассказываю
Добавляем глобальные переменные:
RightEdge, BottomEdge, HStretch, VStretch: boolean;
Затем добавляем в процедуру FormMouseMove этот код:
Код:
//это после обработки MouseOnCard
if (x >= cx+imw) and (x < cx+imw+3) and (y > cy) and (y < cy+imh) then
  begin
  if not RightEdge then
    begin
    RightEdge:=true;
    Cursor:=crHSplit;
    end;
  end
else
if RightEdge then
  begin
  RightEdge:=false;
  Cursor:=crDefault;
  if MouseOnCard then Cursor:=crHandPoint;
  end;

if (x > cx) and (x < cx+imw) and (y >= cy+imh) and (y < cy+imh+3) then
  begin
  if not BottomEdge then
    begin
    BottomEdge:=true;
    Cursor:=crVSplit;
    end;
  end
else
if BottomEdge then
  begin
  BottomEdge:=false;
  Cursor:=crDefault;
  if MouseOnCard then Cursor:=crHandPoint;
  end;

//это после обработки catch
if HStretch then
  begin
  imw:=x-cx;
  Image1.Width:=imw;
  end;

if VStretch then
  begin
  imh:=y-cy;
  Image1.Height:=imh;
  end;
end;
Далее в процедуру FormMouseDown добавляем:
Код:
if RightEdge then HStretch:=True;
if BottomEdge then VStretch:=True;
И в процедуру FormMouseUp
Код:
if HStretch then HStretch:=false;
if VStretch then VStretch:=false;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 05.11.2007, 12:11   #6
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Мутабор,кажется все как ты писал сделал,но мало того что рисунок не сжимался,так он и перемащатся перестал!!!Наверно я где нить ошибся,Пожалуйста просмотри код,может я что-то неверно сделал

PHP код:
unit Unit1;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsExtCtrls;

type
  TForm1 
= class(TForm)
    
Image1TImage;
    
procedure FormCreate(SenderTObject);
    
procedure FormMouseMove(SenderTObjectShiftTShiftStateX,
      
YInteger);
    
procedure FormMouseDown(SenderTObjectButtonTMouseButton;
      
ShiftTShiftStateXYInteger);
    
procedure FormMouseUp(SenderTObjectButtonTMouseButton;
      
ShiftTShiftStateXYInteger);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;
  
cx,cy,fx,fyinteger;
MouseOnCard, catch: boolean;
imw,imhinteger;//øèðèíà è âûñîòà èìèäæà
RightEdgeBottomEdgeHStretchVStretchboolean;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(SenderTObject);
begin
imw
:=image1.width;
imh:=image1.height;
cx:=image1.left;
cy:=image1.top;
DoubleBuffered:=true;
end;

procedure TForm1.FormMouseMove(SenderTObjectShiftTShiftStateX,
  
YInteger);
begin
if (cx) and (cx+imw) and (cy) and (cy+imhthen
begin
if not MouseOnCard then
begin
MouseOnCard
:=true;
Cursor:=crHandPoint;
end;
end
else
if 
MouseOnCard then
begin
MouseOnCard
:=false;
Cursor:=crDefault;
end;
if (
>= cx+imw) and (cx+imw+3) and (cy) and (cy+imhthen
  begin
  
if not RightEdge then
    begin
    RightEdge
:=true;
    
Cursor:=crHSplit;
    
end;
  
end
else
if 
RightEdge then
  begin
  RightEdge
:=false;
  
Cursor:=crDefault;
  if 
MouseOnCard then Cursor:=crHandPoint;
  
end;

if (
cx) and (cx+imw) and (>= cy+imh) and (cy+imh+3then
  begin
  
if not BottomEdge then
    begin
    BottomEdge
:=true;
    
Cursor:=crVSplit;
    
end;
  
end
else
if 
BottomEdge then
  begin
  BottomEdge
:=false;
  
Cursor:=crDefault;
  if 
MouseOnCard then Cursor:=crHandPoint;

if catch 
then
begin
cx
:=x-fx;
cy:=y-fy;
Image1.Left:=cx;
Image1.Top:=cy;
end;
if 
HStretch then
  begin
  imw
:=x-cx;
  
Image1.Width:=imw;
  
end;

if 
VStretch then
  begin
  imh
:=y-cy;
  
Image1.Height:=imh;
  
end;

end;
end;

procedure TForm1.FormMouseDown(SenderTObjectButtonTMouseButton;
  
ShiftTShiftStateXYInteger);
begin
if MouseOnCard then
begin
catch:=true;
fx:=x-cx;
fy:=y-cy;
if 
RightEdge then HStretch:=True;
if 
BottomEdge then VStretch:=True;
end;

end;

procedure TForm1.FormMouseUp(SenderTObjectButtonTMouseButton;
  
ShiftTShiftStateXYInteger);
begin
if catch then catch:=false;
if 
HStretch then HStretch:=false;
if 
VStretch then VStretch:=false;
end;

end
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 05.11.2007, 12:21   #7
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Стилет а что такое капшина?и как его убрать?
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 05.11.2007, 14:23   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Код:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if (x > cx) and (x < cx+imw) and (y > cy) and (y < cy+imh) then
  begin
  if not MouseOnCard then
    begin
    MouseOnCard:=true;
    Cursor:=crHandPoint;
    end;
  end
else
  if MouseOnCard then
    begin
    MouseOnCard:=false;
    Cursor:=crDefault;
    end;

if (x >= cx+imw) and (x < cx+imw+3) and (y > cy) and (y < cy+imh) then
  begin
  if not RightEdge then
    begin
    RightEdge:=true;
    Cursor:=crHSplit;
    end;
  end
else
if RightEdge then
  begin
  RightEdge:=false;
  Cursor:=crDefault;
  if MouseOnCard then Cursor:=crHandPoint;
  end;

if (x > cx) and (x < cx+imw) and (y >= cy+imh) and (y < cy+imh+3) then
  begin
  if not BottomEdge then
    begin
    BottomEdge:=true;
    Cursor:=crVSplit;
    end;
  end
else
if BottomEdge then
  begin
  BottomEdge:=false;
  Cursor:=crDefault;
  if MouseOnCard then Cursor:=crHandPoint;
  end;

if catch then
  begin
  cx:=x-fx;
  cy:=y-fy;
  Image1.Left:=cx;
  Image1.Top:=cy;
  end;

if HStretch then
  begin
  imw:=x-cx;
  Image1.Width:=imw;
  end;

if VStretch then
  begin
  imh:=y-cy;
  Image1.Height:=imh;
  end;

//end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if MouseOnCard then
  begin
  catch:=true;
  fx:=x-cx;
  fy:=y-cy;
  end;
if RightEdge then HStretch:=True;
if BottomEdge then VStretch:=True;
//end;
end;
p.s.
Красным цветом я выделил то что я изменил, тебе менять ничего не надо, просто скопируй.
Свойство Stretch этого имиджа должно быть True.
кэпшин = caption = заголовок
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 05.11.2007 в 14:29.
mutabor вне форума Ответить с цитированием
Старый 05.11.2007, 15:43   #9
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Мутабор спасибо,спасибо получилось
А вот можно чтобы со всех сторон можно было растягивать?
Кстати я еще по одному методу научился имидж перемещать,вот он:
PHP код:
var
  
Form1TForm1;
  
x0integer;
  
y0integer;
  
moveboolean;
implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(SenderTObjectButtonTMouseButton;
  
ShiftTShiftStateXYInteger);
begin
if button <> mbleft
then
move
:=false
else begin
move
:=true;
x0:=x;
y0:=y
end
;
end;

procedure TForm1.Image1MouseMove(SenderTObjectShiftTShiftStateX,
  
YInteger);
begin
if move then begin
image1
.SetBounds(image1.Left+x-x0,image1.Top+y-y0,image1.Width,image1.Height);
end;
end;

procedure TForm1.Image1MouseUp(SenderTObjectButtonTMouseButton;
  
ShiftTShiftStateXYInteger);
begin
move
:=false;
end;

end
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 05.11.2007, 16:16   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот ребята еще один прием:

Итак имеем на форме Image в который пихнули рисунок.
После запуска рисунок получает возможность растягиваться и таскаться по форме удобным и привычным способом.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var   f:TForm;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i:cardinal;
begin
  f:=TForm.Create(form1);
  f.Parent:=Form1;
  f.Show;
  i:=GetWindowLong(f.Handle,GWL_STYLE);
  i:=i and not WS_CAPTION;
  if SetWindowLong(f.Handle,GWL_STYLE,i)=0 then RaiseLastWin32Error;
  Image1.Parent:=f;
  Image1.Align:=alClient;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const
  Sc_dragmove = $F012;
begin
  ReleaseCapture;
  f.Perform(WM_SYSCOMMAND, Sc_dragmove, 0);
end;

end.
Пробуй, если что спрашивай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Растягивание фона psywalker HTML и CSS 7 19.06.2008 18:08
Ластик для имиджа image1 Marsik Мультимедиа в Delphi 24 01.01.2008 14:31
Загрузка и масштабирование имиджа в рамки Marsik Помощь студентам 2 06.11.2007 14:22
Растягивание формы KORT Общие вопросы Delphi 7 23.10.2007 01:19