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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 18:14   #1
phasha
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 130
По умолчанию координаты кнопки

проблема в юнит 2.а это вся прога чтоб легче ориентироваться.

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    grp1: TGroupBox;
    se1: TSpinEdit;
    clrbx1: TColorBox;
    btn1: TButton;
    f: TGroupBox;
    lbl1: TLabel;
    Label1: TLabel;
    lbl2: TLabel;
    edt1: TEdit;
    btn2: TButton;
    btn3: TButton;
    btn4: TBitBtn;
      procedure btn1Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);

    procedure formcreate(sender:TObject);
    procedure formpaint(sender:TObject);
    procedure formclose(sender:TObject;var action:TCloseAction);

     procedure FormKeypress(Sender: TObject; var Key: Word;
 Shift: TShiftState);

    { Private declarations }
  public

    { Public declarations }
  end;

var
  Form1: TForm1;
  field:tfield;

implementation
 procedure TForm1.formcreate(sender: TObject);
begin
    Randomize;
    field:=tfield.create(500,400,10,10,Form1.Canvas);
end;

 procedure TForm1.formclose(sender: TObject;var action: TCloseAction);

begin
    field.Free;
end;


procedure TForm1.formpaint(sender: TObject);
begin
   if field<>nil then field.show;
end;
{$R *.dfm}






{ TForm1 }


procedure TForm1.btn1Click(Sender: TObject);
begin
if not field.addshape(se1.Value,clrbx1.Selected) then begin
  ShowMessage('нельзя добавить');
end;
   end;
procedure TForm1.btn3Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.btn2Click(Sender: TObject);
var tag:Integer;
begin
   if edt1.Text='' then begin ShowMessage('укажи номер окружности');
   Exit;
end;
 tag:=    StrToInt(edt1.Text);
 if (tag>=1)and(tag<=100)then field.removeshape(tag)
 else ShowMessage('неправильный номер');edt1.Clear; end;

 procedure TForm1.FormKeypress(Sender: TObject; var Key: Word;
 Shift: TShiftState);

 begin
 if key = VkKeyScanA('ф') then begin
 btn4.Left:=btn4.Left-20; end;
 if Key = VkKeyScan('в') then begin
  btn4.left:=btn4.left+20;
 end;
   if btn4.left<8 then btn4.left:=8;
    if btn4.left>224 then btn4.left:=224;
  end;




end
Код:
unit Unit2;

interface
 uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ExtCtrls;
  type tcircle=class
  radius:Integer;
  color:TColor;
  placement:TPoint;
  dx,dy:Integer;
  canvas:TCanvas;
  speed:Integer; step:TPoint; ochki:Integer;

  timer:ttimer;
  tag:Integer;
  height,width:Integer;
  constructor create(r,h,w,t,x,y:Integer;col:TColor;c:TCanvas);
  destructor destroy; override;
  procedure move(sender:TObject);
  procedure show(transparent:Boolean=false);    end;
implementation

{ tcircle }
uses Unit1;
constructor tcircle.create(r, h, w, t, x, y: Integer; col: TColor;
  c: TCanvas);
begin   inherited create; Randomize;
height:=h;width:=w;dx:=x;dy:=y;tag:=t;color:=col;canvas:=c;radius:=r;
placement:=Point(random(width-2*radius-1)+radius +1,random(height-2*radius-1)+radius+1);
speed:={Random(25)+}1;    step:=Point(0,-1);     ochki:=0;
timer:=ttimer.create(nil);
timer.interval:=speed;
timer.ontimer:=move;
timer.enabled:=True;
end;

destructor tcircle.destroy;
begin
timer.enabled:=False;
timer.free;
  inherited;
end;

procedure tcircle.move(sender: TObject);

begin


  if ((placement.X+step.x-radius-1<0)or(placement.X+step.x+radius+1>width ))
   then begin

       step.x:=-step.x;
           end ;
   if (placement.Y+step.y-radius-1<0)  then
       begin
        step.y:=-step.y;
          end ;
    if ((placement.Y+step.y+radius+1>height ))  then begin
     step.y:=-step.y;
     Dec(ochki,10);
     if ochki=-100 then begin
       ShowMessage('you lose');
    //выйти
     end;
    end;
     if ((placement.Y+step.y+radius+1>//верхний край кнопки
     ))  then begin
       step.y:=-step.y;   inc(ochki,5);
       if ochki=100 then begin
        ShowMessage('you win!');
        //выйти
       end;
     end;
          show(true);
       placement:=Point(placement.X+step.x,placement.Y+step.y);
        show;
end;
procedure tcircle.show(transparent: Boolean);
begin
      if transparent then begin
        canvas.Brush.Color:=clWhite;
        canvas.Pen.Mode:=pmWhite;
        canvas.Ellipse(placement.X-radius+dx,placement.Y-radius+dy,placement.X+radius+dx,placement.Y+radius+dy);
      end
      else begin
        canvas.Brush.Color:=color;
        canvas.Pen.Mode:=pmCopy;
        canvas.Ellipse(placement.X+dx-radius,placement.Y-radius+dy,placement.X+radius+dx,placement.Y+radius+dy);
        canvas.TextOut(placement.X+dx-trunc(canvas.TextWidth(inttostr(tag))),placement.Y+dy-trunc(canvas.TextHeight('1')/2),IntToStr(tag));
      end;
end;

end.
phasha вне форума Ответить с цитированием
Старый 30.10.2011, 18:14   #2
phasha
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 130
По умолчанию

Код:
unit Unit3;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Unit2;
  type tfield=class
  height,width:Integer;
  left,top:Integer;
  canvas:tcanvas;
  shape: array [1..100] of tcircle;
  constructor   create(h,w,l,t:Integer;c:tcanvas);
  destructor destroy;override;
  procedure show;
  function addshape(radius:Integer;color:tcolor):Boolean;
  procedure removeshape(tag:Integer);
end;
implementation

{ tfield }

function tfield.addshape(radius: Integer; color: tcolor): Boolean;
var i:Integer;
begin
  result:=False;
  for i:=1 to 100 do begin
    if shape[i]=nil then begin
      shape[i]:=tcircle.create(radius,height,width,i,left,top,color,canvas);
      shape[i].show;
      result:=True;
      exit;
    end;
  end;
end;

constructor tfield.create(h, w, l, t: Integer; c: tcanvas);
begin
inherited create;
height:=h;
width:=w;
left:=l;
top:=t;
canvas:=c;
end;

destructor tfield.destroy;
var i:Integer;
begin
  for i:=1 to 100 do shape[i].free;
  inherited;
end;

procedure tfield.removeshape(tag: Integer);
begin
 shape[tag].free;
 shape[tag]:=nil;
 show;
end;

procedure tfield.show;
var i:Integer;
begin
 canvas.brush.color:=clwhite;
 canvas.pen.color:=clblack;
 canvas.pen.mode:=pmcopy;
 canvas.rectangle(left,top,left+width,top+height);
 for i:=1 to 100 do begin
   if shape[i]<>nil then shape[i].show;
 end;
end;

end.
phasha вне форума Ответить с цитированием
Старый 30.10.2011, 19:13   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что за проблема то?
Цитата:
это вся прога
Да-а-а-а??? А где описания форм? Или ты думаешь что нам захочется пересобирать твой проект с нуля?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.10.2011, 19:20   #4
phasha
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 130
По умолчанию

так это не особо важно извеняюсь.

суть в том что я посавил кнопку которая поидее должна отбивать круги(запара с условием в юните 2).просто не могу ничего придумать
Код:
if ((placement.Y+step.y+radius+1>//верхний край кнопки
     ))  then begin
       step.y:=-step.y;   inc(ochki,5);
       if ochki=100 then begin
        ShowMessage('you win!');
        //выйти
       end;
     end;
пробовал btn4.top в условие поставить но это явно не то.

Последний раз редактировалось phasha; 30.10.2011 в 19:35.
phasha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ координаты shedi Помощь студентам 3 06.03.2011 13:28
Координаты х у Onek Помощь студентам 4 17.05.2010 16:37
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35
координаты Aram Общие вопросы C/C++ 5 08.06.2007 20:03