Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2018, 07:32   #1
Palamida
 
Регистрация: 09.11.2017
Сообщений: 9
По умолчанию Дельфи. Случайное появление на форме компонентов Shape (Image)

Помогите пожалуйста! У меня на форме есть несколько компонентов Shape. Можно сделать так что бы они появлялись рандомно при нажатии на кнопку, если можно то как??? И можно ли сделать то же самое с Image?
Palamida вне форума Ответить с цитированием
Старый 20.03.2018, 12:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно.

выставлять случайному компоненту свойство Visible в true - чтобы отобразить компонент на форме, или в false - чтобы спрятать.
если заранее неизвестно какое количество нужный компонент на форме, то я бы
1) в событии FormCreate создал список всех нужных компонент.
(для этого можно использовать или коллекцию или банальный динамический массив) и перебор компонент на форме.

2) при нажатии на кнопку получал случайное число и показывал компонент с таким номером. Все остальные - прятал.

если что-то непонятно - задавайте уточняющие вопросы, я могу набросать пример кода...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2018, 12:22   #3
Palamida
 
Регистрация: 09.11.2017
Сообщений: 9
По умолчанию

Набросайте пожалуйста код. Не понимаю как все это реализовать
Palamida вне форума Ответить с цитированием
Старый 20.03.2018, 12:31   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Palamida Посмотреть сообщение
Набросайте пожалуйста код.
что у вас есть на форме? Shape или Images ?
Вы вообще сделали тестовый проект? Если да - запакуйте исходники в архив и приложите к сообщению.
Если нет - тогда я через часик сам набросаю простенький пример.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2018, 13:09   #5
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Примерно так
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Shape1.Top:= random(Width);
Shape1.Left:= random(Height);
Image1.Top:= random(Width);
Image1.Left:= random(Height);
end;
Aliens_wolfs вне форума Ответить с цитированием
Старый 20.03.2018, 13:24   #6
Palamida
 
Регистрация: 09.11.2017
Сообщений: 9
По умолчанию

не хочет загружать мой файл, слишком тяжелый
вообщем у меня там есть 2 блока питания с красными индикаторами(Shape). я нажимаю на кнопку "внести неисправность блоку" и мне нужно чтобы красный индикатор( неисправности) загорался не на конкретном блоке, а на случайном

Последний раз редактировалось Palamida; 20.03.2018 в 13:34.
Palamida вне форума Ответить с цитированием
Старый 20.03.2018, 13:34   #7
Palamida
 
Регистрация: 09.11.2017
Сообщений: 9
По умолчанию

спасибо большое, сейчас попробую)))
Palamida вне форума Ответить с цитированием
Старый 20.03.2018, 13:45   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, я говорил про ТЕСТОВЫЙ пример, с одной формой, а не полный большой проект с кучей всего разного и кучей форм.

Цитата:
Сообщение от Palamida Посмотреть сообщение
не хочет загружать мой файл, слишком тяжелый
во-вторых, неужели, если в архив запаковать только *.pas, *.res, *.dfm получается очень большой архив?


Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Код:
Shape1.Top:= random(Width);
нет, я имел в виду совсем другой. На форме уже есть куча shape'ов, нужно зажечь один из них.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2018, 13:56   #9
Palamida
 
Регистрация: 09.11.2017
Сообщений: 9
По умолчанию

я не очень хорошо шарю во всем этом, в запаковке файлов имею ввиду. и в тестовых примерах тожее((
Palamida вне форума Ответить с цитированием
Старый 20.03.2018, 14:24   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Palamida Посмотреть сообщение
я не очень хорошо шарю во всем этом, в запаковке файлов имею ввиду. и в тестовых примерах тожее((
хм.. а в чём шарите хорошо?

я имел в виду:
ss1.png


код такой:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    Shape4: TShape;
    Shape5: TShape;
    Shape6: TShape;
    Shape7: TShape;
    Shape8: TShape;
    Label2: TLabel;
    Shape9: TShape;
    Shape10: TShape;
    Shape11: TShape;
    Shape12: TShape;
    Shape13: TShape;
    Shape14: TShape;
    Shape15: TShape;
    Shape16: TShape;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    ShapeArray : array of TShape;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i, n : integer;
begin
  Randomize;
  n := 0;
  for i:= 0 to Self.ComponentCount - 1 do
    if Components[i] is TShape then inc(n);
  SetLength(ShapeArray,n);
  n:=0;
  for i:= 0 to ComponentCount - 1 do
    if Components[i] is TShape then begin
      ShapeArray[n] := (Components[i] as TShape);
      Inc(n);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to Length(ShapeArray)-1 do begin
     if ShapeArray[i].Brush.Color = clRed then begin
       ShapeArray[i].Brush.Color := ClWhite;
       ShapeArray[i].Pen.Color := ClBlack;
     end;
  end;
  i := Random(Length(ShapeArray));
  ShapeArray[i].Brush.Color := ClRed;
  ShapeArray[i].Pen.Color := ClRed;
end;


end.
exe (пароль 123): RandomShapeExample_EXE.rar

исходники проекта: RandomShapeExample_sources.rar
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Появление и исчезновение фигур на форме в Лазарусе Mihail90 Паскаль, Turbo Pascal, PascalABC.NET 1 24.01.2018 09:45
Случайное появление вопросов теста Афанасий[vedma] Общие вопросы Delphi 5 27.01.2012 10:30
Появление картинок на форме. Loadgame Помощь студентам 3 15.11.2011 23:30
Дельфи 7. Image ne4eHUce Общие вопросы Delphi 3 12.04.2011 12:39
Pascal цикл с Shape.Left and Shape.Top BanzoO Помощь студентам 1 13.12.2009 21:47