Нужна помощь по Shape

Тема в разделе "Delphi - FAQ", создана пользователем PaVeL111, 9 июн 2010.

  1. PaVeL111

    PaVeL111 Гость

    Ребята, у меня рамнодмно появляются Шейпы таким образом:
    for i:=1 to x do
    begin
    shape.Left:=Random(440);
    shape.Top:=Random(384);
    shape.Visible:=True;

    end;

    макс 50.

    Каким образом можно узнать пару наимение удаленных из них?
    Напишите плизз код, буду оч благодарен!
    Зарание спасибо.
     
  2. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    А что это означает?

    Добавлено: В смысле налазят они друг на друга или нет?
     
  3. PaVeL111

    PaVeL111 Гость

    Не, домустим создал 6 шейпов и надо проверить какие из них будум минимально наближены между собой, от их тогда и покрасить в красный цвет, что бы било видно.
    А как проверить все возможные растаяния?
     
  4. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Код (Text):
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Buttons, ExtCtrls;

    type
    TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;
    shape:array[1..10] of TShape;

    implementation

    {$R *.dfm}

    procedure TForm1.BitBtn1Click(Sender: TObject); //ищем и красим
    const kolichestvo=10;
    var i,j,ind_i1,ind_i2:integer;
    l1,l:real;
    begin

    ind_i1:=1; //для начала берем растояние между первым и вторым
    ind_i2:=2;

    //находим это растояние

    l:=sqrt(sqr(shape[1].left+shape[1].width div 2 - shape[2].left-shape[2].width div 2)+
    sqr(shape[1].top+shape[1].height div 2 - shape[2].top-shape[2].height div 2));

    l1:=l;

    for i:=1 to kolichestvo do
    for j:=1 to kolichestvo do
    begin
    if i<>j then
    begin
    l1:=sqrt(sqr(shape[i].left+shape[i].width div 2 - shape[j].left-shape[j].width div 2)+
    sqr(shape[i].top+shape[i].height div 2 - shape[j].top-shape[j].height div 2));
    //находим растояние между остальными
    if l1<l then //и проверяем эго с минимальным
    begin
    l:=l1; //если найденое меньше то запоминаем новое минимальное растояние
    ind_i1:=i; //запоминаем их номера
    ind_i2:=j;
    end;
    end;
    end;

    shape[ind_i1].brush.color:=clred; //красим
    shape[ind_i2].brush.color:=clred;

    end;


    procedure TForm1.Button1Click(Sender: TObject); //меняем положения
    var i:integer;
    begin
    for i:=1 to 10 do
    begin
    shape[i].top:=random(200);
    shape[i].left:=random(300);
    shape[i].width:=random(5)+10;
    shape[i].height:=shape[i].width;
    shape[i].Brush.Color:=clwhite;
    end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
    for i:=1 to 10 do
    begin
    shape[i]:=TShape.create(self); //создаем шейпы
    shape[i].parent:=form1;
    shape[i].top:=random(200);
    shape[i].left:=random(300);
    shape[i].width:=random(5)+10;
    shape[i].height:=shape[i].width;
    end;

    end;

    end.
     
  5. PaVeL111

    PaVeL111 Гость

    Спасибо большое%))
    А как я могу вам поставить "+"? а то нажимаю на зелёный плюсик и ничего не происходит... ;)
     
  6. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    На форуме стоит ограничение, надо имен кажись не меньше 5..10 сообщений.
     
  7. PaVeL111

    PaVeL111 Гость

    тогда щас розкручусь хотя б в етой теме)))
    и ещо одно, создал GroupBox1 но он получается поверх всех кнопок, текста и тд, как сделать что бы на нем было все а не под ним?
     
  8. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Если динамически то незнаю, а если просто кидаеш на форму то клик правой кнопкой на GroupBox1->control->Send to back
    ЗЫ В дальнейшем создавай для этого отдельные темы.Одна тема-Один вопрос

    Добавлено: Если динамически то при создании допиши Имя_обекта.SendToBack;
     
  9. PaVeL111

    PaVeL111 Гость

    Спасибо огромное)))
     
  10. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Код (Delphi):
    // Если надо поместить контролы внутрь групбокса
    shape[i].Parent := GroupBox1;
    ...
    Button1.Parent := GroupBox1;


    // Если групбокс просто "для красоты"
    GroupBox1.SendToBack;
     
Загрузка...

Поделиться этой страницей