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

Delphi Sources



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

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

возникла задача перемещения объектов Tshape по форме во время работы приложения.задачу решил.дальше нужно сохранить параметры всех объектов в ини файл и создать эти же объекты в таком же положении на другой форме в динамическом режиме.это тоже получилось.у меня только один вопрос.про перекрывание.как быть?как определить,какой объект находится поверх какого?
Код:
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, время: 04:38.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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