Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как менять размеры компонента мышкой, в runtime ??? / 16 сообщений из 16, страница 1 из 1
25.10.2018, 11:00
    #39722680
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
Добрый день.

Интересует компонент, который дает возможность в запущеном приложении, изменять свойство компонентов мышкой, а именно top, left, width, height. Примерно так же как это делает сама дельфя в режиме дезайнера.

Что бы вы понимали что мне нужно и для чего.
Мне это нужно для того, что бы сделать скриншот выделенной области.
То-есть форма на весь экран, без рамок. заливается черным цветом, ставится небольшая прозрачность.
Создается shape, внутренность шейпа прозрачна полностью! Мне нужно мышкой менять размер шейпа, и потом сделать скриншот, по координатам и размерам шейпа.
пните пожалуйста в правильном направлении, или посоветуйте удобный вариант..
...
Рейтинг: 0 / 0
25.10.2018, 11:11
    #39722685
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
Tech N9ne,

На использование готовых сервисов наложено табу? Joxi, ScreenShoter и т.д....
...
Рейтинг: 0 / 0
25.10.2018, 11:28
    #39722699
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
Tech N9ne,

Код: pascal
1.
CreateParams(...); override;


+ WS_SIZEBOX
...
Рейтинг: 0 / 0
25.10.2018, 11:38
    #39722709
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
Tech N9neИнтересует компонент, который дает возможность в запущеном приложении, изменять свойство компонентов мышкой, а именно top, left, width, height. Примерно так же как это делает сама дельфя в режиме дезайнера.
http://sql.ru/forum/actualsearch.aspx?search=econtrol&bid=20

Tech N9neМне это нужно для того, что бы сделать скриншот выделенной области.
То-есть форма на весь экран, без рамок. заливается черным цветом, ставится небольшая прозрачность.
Создается shape, внутренность шейпа прозрачна полностью!
Мне нужно мышкой менять размер шейпа, и потом сделать
скриншот, по координатам и размерам шейпа.Для этого сабж не нужен. Что нужно и как лучше зависит от адекватной постановки задачи. Что и для чего нужно? Обычное выделение прямоугольником можно вообще "без компонентов" делать, обработкой нажатий мыши.
...
Рейтинг: 0 / 0
25.10.2018, 12:25
    #39722745
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
kealon(Ruslan)Tech N9ne,

Код: pascal
1.
CreateParams(...); override;


+ WS_SIZEBOX
Нашёл такой код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  private
    procedure CreateParams(var Params: TCreateParams) ; override;
...
procedure TForm1.CreateParams(var Params: TCreateParams) ;
begin
   inherited;
   Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
   Params.Style := Params.Style or WS_SIZEBOX;
end;


Я так понимаю это примерно то, о чем вы мне написали?
появляется рамка именно у формы. Можно как то давать такие рамки на компоненты?

Гаджимурадов Рустам,
Я то могу сделать на mousedown,mousemove,mouseup, нажал - появилась рамка, подвинул получилось выделенная область, и при mouseup делать скрин по этим координатам. НО, я хочу что бы рамка появилась автоматом и была возможность менять размер мышкой.
Пример о котором вы говорите, который на down,move,up - описывается в уроке, на каком-то сайте. Но я так не хочу, это не всегда удобно.
...
Рейтинг: 0 / 0
25.10.2018, 12:39
    #39722757
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
[quot Tech N9ne]kealon(Ruslan)Tech N9ne,

Я так понимаю это примерно то, о чем вы мне написали?
появляется рамка именно у формы. Можно как то давать такие рамки на компоненты?
-да
-да, у компонента (у любого наследника TWinControl) тоже можно переопределить этот метод

PS: если написание своего компонента и его создание во время исполнения слишком сложно, можно использовать "шаманский метод Geo"
...
Рейтинг: 0 / 0
25.10.2018, 13:23
    #39722787
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
Tech N9neкомпонент, который дает возможность в запущеном приложении, изменять свойство компонентов мышкой, а именно top, left, width, height. Примерно так же как это делает сама дельфя в режиме дезайнера https://torry.net/quicksearchd.php?String=Extlib&Title=Yes
...
Рейтинг: 0 / 0
25.10.2018, 13:43
    #39722805
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
ma1tusTech N9neкомпонент, который дает возможность в запущеном приложении, изменять свойство компонентов мышкой, а именно top, left, width, height. Примерно так же как это делает сама дельфя в режиме дезайнера https://torry.net/quicksearchd.php?String=Extlib&Title=Yes
скачал а на д7 нету. только для д5, д6... хотя на торри написано что и для д7
...
Рейтинг: 0 / 0
25.10.2018, 13:51
    #39722813
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
попробуй поставить пакет для D6 на D7
...
Рейтинг: 0 / 0
25.10.2018, 14:01
    #39722827
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
ma1tus,



после того как нажал ОК,

...
Рейтинг: 0 / 0
25.10.2018, 15:56
    #39722922
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
Всем спасибо за помощь.
Если кому интересно, реализовал с помощью компонента SizeControl
...
Рейтинг: 0 / 0
25.10.2018, 16:41
    #39722943
L1G
L1G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
Tech N9ne,
компоненту, который должен перетаскиваться и ресайзиться мышью, достаточно назначить свои обработчики OnMouseDown, OnMouseMove и OnDragOver
+ эти же OnMouseMove и OnDragOver назначить самой форме
пример кода обработчиков
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
var X0, Y0: integer; SizingMode: boolean;

procedure TForm1.ControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if not(Sender is TControl) then Exit;
  SizingMode:= (X > TControl(Sender).Width-8) or (Y > TControl(Sender).Height-8);
  X0:=X; Y0:=Y;
  TControl(Sender).BeginDrag(true);
end;

procedure TForm1.ControlDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source is TControl then with TControl(Source) do
    if SizingMode then
    begin
      Width:=Width+X-X0; Height:=Height+Y-Y0;
      X0:=X; Y0:=Y;
    end
    else begin
      if Source=Sender then
      begin
        Left:=Left+X-X0; Top:=Top+Y-Y0;
      end
      else begin
        if Parent <> Sender then Exit;
        Left:=X-Width div 2; Top:=Y-Height div 2;
      end;
    end;
  Accept:=True;
end;

procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if (X > TControl(Sender).Width-8) or (Y > TControl(Sender).Height-8) then
    Screen.Cursor:=crSizeNWSE else Screen.Cursor:=crDefault
end;

...
Рейтинг: 0 / 0
25.10.2018, 18:13
    #39723001
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
L1GTech N9ne,
компоненту, который должен перетаскиваться и ресайзиться мышью, достаточно назначить свои обработчики OnMouseDown, OnMouseMove и OnDragOver
+ эти же OnMouseMove и OnDragOver назначить самой форме
пример кода обработчиков
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
var X0, Y0: integer; SizingMode: boolean;

procedure TForm1.ControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if not(Sender is TControl) then Exit;
  SizingMode:= (X > TControl(Sender).Width-8) or (Y > TControl(Sender).Height-8);
  X0:=X; Y0:=Y;
  TControl(Sender).BeginDrag(true);
end;

procedure TForm1.ControlDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source is TControl then with TControl(Source) do
    if SizingMode then
    begin
      Width:=Width+X-X0; Height:=Height+Y-Y0;
      X0:=X; Y0:=Y;
    end
    else begin
      if Source=Sender then
      begin
        Left:=Left+X-X0; Top:=Top+Y-Y0;
      end
      else begin
        if Parent <> Sender then Exit;
        Left:=X-Width div 2; Top:=Y-Height div 2;
      end;
    end;
  Accept:=True;
end;

procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if (X > TControl(Sender).Width-8) or (Y > TControl(Sender).Height-8) then
    Screen.Cursor:=crSizeNWSE else Screen.Cursor:=crDefault
end;


хм, это работает, только если делать это максимально плавно, иначе курсор просто "отпускает" компонент. это про изменения размера
если начать передвигать компонент рядом с углом, то тоже отпускает, так как мышка больше вне компонента.
((
...
Рейтинг: 0 / 0
25.10.2018, 18:15
    #39723005
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
Ой, извиняюсь, недочитал)))))
вставил в форму тоже))
...
Рейтинг: 0 / 0
25.10.2018, 18:24
    #39723014
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
L1GTech N9ne,
компоненту, который должен перетаскиваться и ресайзиться мышью, достаточно назначить свои обработчики OnMouseDown, OnMouseMove и OnDragOver
+ эти же OnMouseMove и OnDragOver назначить самой форме
пример кода обработчиков
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
var X0, Y0: integer; SizingMode: boolean;

procedure TForm1.ControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if not(Sender is TControl) then Exit;
  SizingMode:= (X > TControl(Sender).Width-8) or (Y > TControl(Sender).Height-8);
  X0:=X; Y0:=Y;
  TControl(Sender).BeginDrag(true);
end;

procedure TForm1.ControlDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source is TControl then with TControl(Source) do
    if SizingMode then
    begin
      Width:=Width+X-X0; Height:=Height+Y-Y0;
      X0:=X; Y0:=Y;
    end
    else begin
      if Source=Sender then
      begin
        Left:=Left+X-X0; Top:=Top+Y-Y0;
      end
      else begin
        if Parent <> Sender then Exit;
        Left:=X-Width div 2; Top:=Y-Height div 2;
      end;
    end;
  Accept:=True;
end;

procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if (X > TControl(Sender).Width-8) or (Y > TControl(Sender).Height-8) then
    Screen.Cursor:=crSizeNWSE else Screen.Cursor:=crDefault
end;


Не, извините, это не подходит))
мне нужно внутреннюю часть компонента сделать полностью прозрачной. по сторонам растягивается нормально, но вот во внутрь нет. так как если двигать чуть быстреей чем медленно, то курсор оказывается в той самой прозрачной области.
Извините за потраченное время на меня, но это мне не подходит, спасибо ))
...
Рейтинг: 0 / 0
25.10.2018, 19:15
    #39723040
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как менять размеры компонента мышкой, в runtime ???
Есть еще вариант)) в качестве компонента который будет в роли рамки - shape
Но шейп не двигается, сообщение WM_SYSCOMMAND ему побоку..
По этому киул на форму панель, а в панель уже шейп align alclient.
и в свойстве PEN - width бардюры увеличил до 10
на mousedown шейпа делаю проверку где кликнули, и меняю размер.
if ( X > shp1.Width - 10 ) and ( Y <> shp1.Top - 10 ) and ( Y <> shp1.Height - 10 ) then // -10 это бардюры
begin
ReleaseCapture;
sPanel1.perform(WM_SysCommand, $f002, 0);
end;
И так все 4 стороны.

Всем пытавшимся помочь спасибо
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как менять размеры компонента мышкой, в runtime ??? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]