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

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

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

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

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


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

Tech N9neМне это нужно для того, что бы сделать скриншот выделенной области.
То-есть форма на весь экран, без рамок. заливается черным цветом, ставится небольшая прозрачность.
Создается shape, внутренность шейпа прозрачна полностью!
Мне нужно мышкой менять размер шейпа, и потом сделать
скриншот, по координатам и размерам шейпа.Для этого сабж не нужен. Что нужно и как лучше зависит от адекватной постановки задачи. Что и для чего нужно? Обычное выделение прямоугольником можно вообще "без компонентов" делать, обработкой нажатий мыши.
...
Рейтинг: 0 / 0
Как менять размеры компонента мышкой, в runtime ???
    #39722745
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как менять размеры компонента мышкой, в runtime ???
    #39722757
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Tech N9ne]kealon(Ruslan)Tech N9ne,

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

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



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

...
Рейтинг: 0 / 0
Как менять размеры компонента мышкой, в runtime ???
    #39722922
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за помощь.
Если кому интересно, реализовал с помощью компонента SizeControl
...
Рейтинг: 0 / 0
Как менять размеры компонента мышкой, в runtime ???
    #39722943
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как менять размеры компонента мышкой, в runtime ???
    #39723001
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как менять размеры компонента мышкой, в runtime ???
    #39723005
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, извиняюсь, недочитал)))))
вставил в форму тоже))
...
Рейтинг: 0 / 0
Как менять размеры компонента мышкой, в runtime ???
    #39723014
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как менять размеры компонента мышкой, в runtime ???
    #39723040
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще вариант)) в качестве компонента который будет в роли рамки - 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
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как менять размеры компонента мышкой, в runtime ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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