Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 24.04.2018
Сообщений: 3

Работа с Image, TrackBar. Увеличение изображения как в картах Google

24.04.2018, 10:27. Показов 1373. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Прошу помощи в распутывании проблемы с отображением Image, trackbar.

Есть Iamge , TrackBar его увеличивает и уменьшает. Также сделал возможность перемещения Image мышкой.
НО!
Мне нужно чтобы при увеличении Image, увеличивался ЦЕНТР картинки. Т.е как в картах Google. Находим центр Screen и уже от этого центра и отходим при увеличении картинки. А она у меня постоянно "сьезжает" в левый край.
Сразу скажу, что изначально размеры картинки гораздо больше самой области видимости экрана.


Delphi
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
unit cxdepo;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Menus, WinTypes, WinProcs,main, Spin ,defines, jpeg,
  ComCtrls,Math;
 
 
  type
  TDepoForm = class(TForm)
    Panel2: TPanel;
    Button1: TButton;
    ScrollBox1: TScrollBox;
    Image1depo: TImage;
    Image1: TImage;
    ScrollBar1: TScrollBar;
    ScrollBar2: TScrollBar;
    Edit1: TEdit;
    TrackBar1: TTrackBar;
    procedure FormActivate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Image1depoMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ScrollBar2Scroll(Sender: TObject; ScrollCode: TScrollCode;
      var ScrollPos: Integer);
    procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
      var ScrollPos: Integer);
    procedure TrackBar1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Image1depoMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1depoMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
     procedure ZoomTo(CenterX, CenterY, ZoomBy: Integer);
    procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    procedure ScrollTo(CenterX, CenterY: Integer);
    Procedure Center;
 
 
    {procedure N2depoClick(Sender: TObject);}
  private
    { Private declarations }
  public
    { Public declarations }
    ScrDC       : hDC;
    Zoom        : Integer;
    OldCX, OldCY: Integer;
  end;
 
  const
  crMyCursor =5;
 
  var
  DepoForm: TDepoForm;
  n,m,z : integer;
   w,h:integer;
 
   f:boolean;
  xc,yc:integer;
 
 
  implementation
 
{$R *.DFM}
 
 
procedure TDepoForm.FormActivate(Sender: TObject);
 
begin
 
 windowstate := wsMaximized;
 image1depo.Cursor := crHandPoint;
 
 
 
 
 if fmmain.N18.Checked = true then
 begin
   image1depo.Picture.LoadFromFile('DepoZAM.bmp');
   depoform.Caption := 'Noaia ye.aaii Caiineai?aoeia                     [Oaaee?aiea - eaaay eeaaeoa iuoe]   [Oiaiuoaiea - i?aaay eeaaeoa iuoe]';
   image1depo.Align := alclient;
 end
 else
 if fmmain.N43.Checked = true then
 begin
   image1depo.Picture.LoadFromFile('DepoBRAT.bmp');
   depoform.Caption := 'Noaia ye.aaii A?aoaaai                     [Oaaee?aiea - eaaay eeaaeoa iuoe]   [Oiaiuoaiea - i?aaay eeaaeoa iuoe]';
 end
 else
   if fmmain.N32.Checked = true then
 begin
   image1depo.Picture.LoadFromFile('DepoSOK.bmp');
   depoform.Caption := 'Noaia ye.aaii Nieie                     [Oaaee?aiea - eaaay eeaaeoa iuoe]   [Oiaiuoaiea - i?aaay eeaaeoa iuoe]';
 end
 
 else
 
 if fmmain.N40.checked = true then
 
 if FileExists('KSDepoZAM.jpg') = true
 then
 begin
    image1depo.Picture.LoadFromFile('KSDepoZAM.jpg');
    depoform.Caption := 'Noaia eiioaeoiie naoe ye.aaii Caiineai?aoeia                    [Oaaee?aiea - eaaay eeaaeoa iuoe]   [Oiaiuoaiea - i?aaay eeaaeoa iuoe]';
 end else
 if FileExists('KSDepoZAM.bmp') = true then
 begin
   image1depo.Picture.LoadFromFile('KSDepoZAM.bmp');
   depoform.Caption := 'Noaia eiioaeoiie naoe ye.aaii Caiineai?aoeia                 [Oaaee?aiea - eaaay eeaaeoa iuoe]   [Oiaiuoaiea - i?aaay eeaaeoa iuoe]';
 end else
 begin
   showmessage('Ionoonoaoao oaee aaii BMP eee JPG a ae?aeoi?ee BIN ');
 
 end
 
  else
 
 // begin
 if fmmain.N41.checked = true then
 
 if FileExists('KSDepoSOK.jpg') = true
 then
 begin
 image1depo.Picture.LoadFromFile('KSDepoSOK.jpg');
 depoform.Caption := 'Noaia eiioaeoiie naoe ye.aaii Nieie                    [Oaaee?aiea - eaaay eeaaeoa iuoe]   [Oiaiuoaiea - i?aaay eeaaeoa iuoe]';
 end else
 if FileExists('KSDepoSOK.bmp') = true then
 begin
 image1depo.Picture.LoadFromFile('KSDepoSOK.bmp');
 depoform.Caption := 'Noaia eiioaeoiie naoe ye.aaii Nieie                    [Oaaee?aiea - eaaay eeaaeoa iuoe]   [Oiaiuoaiea - i?aaay eeaaeoa iuoe]';
 end else
 begin
 showmessage('Ionoonoaoao oaee aaii BMP eee JPG a ae?aeoi?ee BIN ');
 
 end
 
 else
 
  begin
 if fmmain.N42.checked = true then
 
 if FileExists('KSDepoBRAT.jpg') = true
 then
 begin
 image1depo.Picture.LoadFromFile('KSDepoBRAT.jpg');
 depoform.Caption := 'Noaia eiioaeoiie naoe ye.aaii A?aoaaai                   [Oaaee?aiea - eaaay eeaaeoa iuoe]   [Oiaiuoaiea - i?aaay eeaaeoa iuoe]';
 end else
 if FileExists('KSDepoBRAT.bmp') = true then
 begin
 image1depo.Picture.LoadFromFile('KSDepoBRAT.bmp');
 depoform.Caption := 'Noaia eiioaeoiie naoe ye.aaii A?aoaaai                   [Oaaee?aiea - eaaay eeaaeoa iuoe]   [Oiaiuoaiea - i?aaay eeaaeoa iuoe]';
 end else
 begin
 showmessage('Ionoonoaoao oaee aaii BMP eee JPG a ae?aeoi?ee BIN ');
 
 end
 end;
 
 
n := image1.Width div 2;
m := image1.Height div 2;
image1.Visible := false;
z :=1;
 
scrollbox1.HorzScrollBar.Visible := false;
scrollbox1.VertScrollBar.Visible := false;
 
 
 
 end;
 
procedure TDepoForm.FormResize(Sender: TObject);
begin
if windowstate <> wsMaximized then
windowstate := wsMaximized;
 
 
 
end;
 
 
procedure TDepoForm.Button1Click(Sender: TObject);
begin
image1depo.Align := alnone;
 
close;
 
end;
 
 
 
 
procedure TDepoForm.Image1depoMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
v,b : integer;
 
begin
 
  xc:=x;
yc:=y;
f:=True;
 
 end;
 
 
procedure TDepoForm.ScrollBar2Scroll(Sender: TObject;
  ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
image1depo.Top := -scrollbar2.Position;
end;
 
procedure TDepoForm.ScrollBar1Scroll(Sender: TObject;
  ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
image1depo.Left := -scrollbar1.Position;
end;
 
 
procedure TDepoForm.TrackBar1Change(Sender: TObject);
begin
 
 
     image1depo.Width:= 500*TrackBar1.Position;
    image1depo.Height:=500* TrackBar1.Position;
 
 
end;
 
procedure TDepoForm.FormCreate(Sender: TObject);
begin
  w:=image1depo.Width;
  h:=image1depo.Height;
     TrackBar1.Min:=1;
  TrackBar1.Max:=8;
 
end;
 
procedure TDepoForm.Image1depoMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
If f=True then
  begin
  image1depo.Left:=Mouse.CursorPos.X-Left-(Width-ClientWidth)-xc;
  image1depo.Top:=Mouse.CursorPos.Y-Top-(Height-ClientHeight)-yc;
  end;
end;
 
procedure TDepoForm.Image1depoMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
f:=False;
end;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2018, 10:27
Ответы с готовыми решениями:

Как можно увеличить или уменьшить изображения в Image с помощью TrackBar-а?
Добрый ноч форум! Подскажите пожалуйсто как можно увеличить или уменшить изображения в Image с помошию TrackBar -а? Добавлено...

Зум(увеличение) изображения System.Drawing.Image
Как увеличить изображение System.Drawing.Image в 2 раза?

Спарсить изображения с сайта image.google.com
Доброй ночи прошу подсказок в вопросе спарсить изображения с сайта image.google.com.Подскажите какую библиотеку использовать(мне без...

4
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
24.04.2018, 10:44
вам нужно рассчитать, на сколько сместился центр, и передвинуть скролл на это значение
0
0 / 0 / 0
Регистрация: 24.04.2018
Сообщений: 3
24.04.2018, 11:03  [ТС]
Спасибо. Но можете привести пример такого расчёта ?
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
24.04.2018, 13:09
оригинал (масштаб=1.0)
W1=100; H1=100
центр С1.X=50; C1.Y=50

масштаб=1.5
W2=150; H2=150
центр С2.X=75; C2.Y=75

delta.x = C2.x-C1.x;
delta.y = C2.y-C1.y;
horzscrollbar.position := delta.x
vertscrollbar.position := delta.y;
0
0 / 0 / 0
Регистрация: 24.04.2018
Сообщений: 3
24.04.2018, 14:28  [ТС]
Спасибо Большое !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2018, 14:28
Помогаю со студенческими работами здесь

Как сдлелать увеличение и уменьшение громкость спомощью trackBar
Здраствуйте, подскажите пожалуйста как сдлелать увеличение и уменьшение громкость спомощью trackBar. Запускаю я песню и private void...

Как написать функцию увеличение\уменьшение в TrackBar (Builder)
void __fastcall TForm1::TrackBar1Change(TObject *Sender) { // нужно, чтобы увеличивала|уменьшала масштаб моего куба }

Увеличение TrackBar.Value каждую секунду
Подскажите, как увеличивать значение trackBara-а на 1-ин, каждую секунду, с помощью timer-а.

Увеличение размера кнопки при изменении значения TrackBar
Здравствуйте,у меня такая проблема,есть TrackBar и несколько кнопок,мне нужно ,что бы при нажатии кнопки она становилась...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru