Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.01.2011, 07:43
NKVD NKVD вне форума
Прохожий
 
Регистрация: 06.01.2011
Сообщения: 25
Репутация: 10
По умолчанию ПЕРЕТАСКИВАНИЕ КОМПОНЕНТОВ В ОКНЕ ПРИЛОЖЕНИЯ

возникла задача перемещения объектов Tshape по форме во время работы приложения.задачу решил.дальше нужно сохранить параметры всех объектов в ини файл и создать эти же объекты в таком же положении на другой форме в динамическом режиме.это тоже получилось.у меня только один вопрос.про перекрывание.как быть?как определить,какой объект находится поверх какого?
Код:
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
unit DesignTimeFormUnit;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, IniFiles;
 
type
  TDesignTimeForm = class(TForm)
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    Shape4: TShape;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  DesignTimeForm: TDesignTimeForm;
  x0, y0: integer; //начальные координаты картинки
drag: boolean = false;//определяет режим буксировки
  y:integer=32;
  l1:integer=48;
  l2:integer=168;
  l3:integer=320;
  l4:integer=520;
  //str: string;
 
implementation
 
{$R *.dfm}
 
procedure TDesignTimeForm.Shape1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button=mbLeft
then begin //если нажата левая кнопка мыши
x0:=x; //запоминаем первоначальные
y0:=y; //координаты курсора
drag:=true; //перемещение началось
//методом BringToFront выдвигаем компонент
//в котором произошло событие не передний план
(Sender as TShape).BringToFront;
end
else //если нажата не левая кнопка мыши
drag:=false; //нет перемещения
end;
 
procedure TDesignTimeForm.FormDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
//разрешаем принимать только компонент Shape
Accept:=Source is TShape;
end;
 
procedure TDesignTimeForm.Shape1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
if drag
then
with TShape(Sender) do
begin
if  (Left>0) AND  (Top>0)
then
begin
Left:=Left+x-x0;
Top:=Top+y-y0 ;
end;
//else
if  Left<=(DesignTimeForm.ClientWidth-DesignTimeForm.ClientWidth)
then
Left:=DesignTimeForm.ClientWidth-DesignTimeForm.ClientWidth+1;
if Left>=(DesignTimeForm.ClientWidth-Width)
then
Left:=DesignTimeForm.ClientWidth-Width-1;
if Top<=0
then
Top:=1;
if Top>=245
then
Top:=243;
end ;
end;
 
procedure TDesignTimeForm.Shape1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
drag:=false;
end;
 
procedure TDesignTimeForm.BitBtn1Click(Sender: TObject);
begin
Shape1.Top:=y;
Shape2.Top:=y;
Shape3.Top:=y;
Shape4.Top:=y;
Shape1.Left:=l1;
Shape2.Left:=l2;
Shape3.Left:=l3;
Shape4.Left:=l4;
end;
 
procedure TDesignTimeForm.BitBtn2Click(Sender: TObject);
var
Ini:Tinifile;
i,k,s:integer;
str: string;
begin
s:=0;
for k:=0 to ComponentCount-1 do
    if Components[k] is TShape then
    begin
s:=s+1;
    end;
Ini:=TiniFile.Create(extractfilepath(Application.ExeName)+'base.ini');
//for i:=1 to 4 do
for i:=1 to s do
begin
str:=IntToStr(i);
Ini.WriteInteger('Shape'+str,'Left',(FindComponent('Shape'+str) as TSHape).Left );
Ini.WriteInteger('Shape'+str,'Top',(FindComponent('Shape'+str) as TSHape).Top );
Ini.WriteInteger('Shape'+str,'Tag',(FindComponent('Shape'+str) as TSHape).Tag );
Ini.WriteInteger('Shape'+str,'Height',(FindComponent('Shape'+str) as TSHape).Height );
Ini.WriteInteger('Shape'+str,'Width',(FindComponent('Shape'+str) as TSHape).Width);
Ini.WriteInteger('Shape'+str,'Color',(FindComponent('Shape'+str) as TSHape).Brush.Color);
Ini.WriteInteger('Shape'+str,'Shape',Integer((FindComponent('Shape'+str) as TSHape).Shape));
Ini.WriteInteger('Shape'+str,'Style',Integer((FindComponent('Shape'+str) as TSHape).Brush.Style));
Ini.WriteInteger('Shape'+str,'ColorPen',(FindComponent('Shape'+str) as TSHape).Pen.Color);
Ini.WriteInteger('Shape'+str,'WidthPen',(FindComponent('Shape'+str) as TSHape).Pen.Width);
end;
Ini.Free;
Close;
end;
 
end.

Последний раз редактировалось NKVD, 07.01.2011 в 10:26.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025