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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2011, 12:09   #1
Человек Панда
Пользователь
 
Регистрация: 04.02.2011
Сообщений: 75
Вопрос Vcl режим.Компиляция верна,но почему-то не работает программа.

Здравствуйте.Пишу программу на delphi в vcl режиме.Создал форму,кнопу выхода.Проблема заключается в следующем:при событии нажатия левой кнопки мыши на image должны рисоваться круги,при нажатии правой-иерархия из двух ветвей.Процедуру рисования разместил в отдельном модуле,но почему-то не могу найти ошибку(рисование не происходит).Компилятор не выдает ошибок не в режиме build,не в режиме compile.Что делать?
Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,unit2;
type
  tForm1 = class(TForm)
    btn1: TButton;
    img1: TImage;
    procedure btn1Click(Sender: TObject);
    procedure  formactivate(sender:TObject);
    procedure img1MouseDown2(b:ris;sh:TShiftState);
  end;

var
  Form1: TForm1;
  x,y:Integer;
implementation
{$R *.dfm}
  procedure tform1.formactivate(sender:TObject);
begin
   img1.canvas.Brush.Color:=clwhite;
   end;
procedure TForm1.btn1Click(Sender: TObject);
begin
Close;
end;
  procedure tform1.img1MouseDown2;
    var  s:TShiftState;  a:ris;
   begin
     a:=b;
     s:=sh;
     a.imgMouseDown(img1,(mbLeft),s,x,y);
     a.imgMouseDown(img1,(mbright),s,x,y);
   end;
 end.
Код:
unit Unit2;
interface
      uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
    type ris=class(TForm)
         img: TImage;
       procedure imgMouseDown(Sender: TObject;
       Button: TMouseButton;Shift:TShiftState;x,Y:Integer);
       end;
       implementation
        procedure ris.imgMouseDown(Sender: TObject;
Button: TMouseButton;Shift:TShiftState;X,Y:Integer);
 var i,j,k,l:integer;fradius:Integer;
begin
  Randomize;
  if button=mbleft then
  begin
      img.canvas.Brush.Color:=clRed;
      fradius:=random(10)-20 ;
      img.Canvas.Pen.Color:=clblack;
      img.Canvas.Ellipse(x-FRadius,y-FRadius,
					         x+FRadius,y+FRadius);
  end;
  if Button=mbright then
  begin
       img.Canvas.brush.Color:=clblue;
       img.Canvas.Pen.Color:=clyellow;
       img.Canvas.MoveTo(x,y);
       img.Canvas.lineto (x+20,y+80);
       img.canvas.moveto(x,y);
       img.canvas.lineto(x-20,y+80);
       img.Canvas.Pen.Color:=clblack;
       i:=x+20;   k:=x-20;
       j:=y+80;  l:=y+80;
       img.Canvas.Ellipse(i-10,j-10,i+10,j+10);
       img.Canvas.Ellipse(k-10,l-10,k+10,l+10);

  end;
    end;
       end.

Последний раз редактировалось Stilet; 06.02.2011 в 19:09.
Человек Панда вне форума Ответить с цитированием
Старый 06.02.2011, 13:19   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Для рисования граф.примитивов существует TPaintBox - в его событии OnPaint рисуй на его канве все что нужно.
mss вне форума Ответить с цитированием
Старый 06.02.2011, 16:04   #3
Человек Панда
Пользователь
 
Регистрация: 04.02.2011
Сообщений: 75
По умолчанию

Спасибо за совет.Как я понял, TPaintBox дает возможность рисования?Я знаю немного о нем,говорили только про канву и её свойства,остальноее сам додумываю.Попробую так сделать.Еще раз спасибо за совет

Я исправил,как посоветывали,но мне кажется ошибка в чем-то другом.Вот второй вариант(опять не рисует,хотя скомпилировался идеально):
Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,unit2;
type

tForm1 = class(TForm)
btn1: TButton;
img1: TImage;
PaintBox1: TPaintBox;
procedure btn1Click(Sender: TObject);
procedure formactivate(sender:TObject);
procedure img1MouseDown2(b:ris;sh:TShiftState );
end;

var
Form1: TForm1;
x,y:Integer;
implementation
{$R *.dfm}
procedure tform1.formactivate(sender:TObject) ;
begin
img1.canvas.Brush.Color:=clwhite;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
Close;
end;
procedure tform1.img1MouseDown2;
var s:TShiftState; a:ris;
begin
a:=b;
s:=sh;
a.PaintBox1paint(PaintBox1,x,y) ;
end;
end.

unit Unit2;
Код:
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type ris=class(TForm)
img: TImage;
PaintBox1: TPaintBox;
procedure init(m:tmousebutton) ;
procedure PaintBox1paint(Sender: TObject;q,w:integer);
end;
implementation
 var    Button: TMouseButton;
procedure ris.init;
begin
  button:=m;
end;
procedure ris.PaintBox1paint(Sender: TObject;q,w:integer);
var i,j,k,l:integer;fradius:Integer;
begin
Randomize;
if button=mbleft then
 with PaintBox1, Canvas do
begin
Brush.Color:=clRed;
fradius:=random(10)-20 ;
Pen.Color:=clblack;
Ellipse(q-FRadius,w-FRadius,
q+FRadius,w+FRadius);
end;
if Button=mbright then
   with PaintBox1, Canvas do
begin
brush.Color:=clblue;
img.Canvas.Pen.Color:=clyellow;
img.Canvas.MoveTo(q,w);
img.Canvas.lineto (q+20,w+80);
img.canvas.moveto(q,w);
img.canvas.lineto(q-20,w+80);
img.Canvas.Pen.Color:=clblack;
i:=q+20; k:=q-20;
j:=w+80; l:=w+80;
img.Canvas.Ellipse(i-10,j-10,i+10,j+10);
img.Canvas.Ellipse(k-10,l-10,k+10,l+10);

end;
end;
end.
Помогите решить проблему.

насчет второй части программы(забыл переделать).Переднелал все под PaintBox1,но ситуация такаяже

Последний раз редактировалось Stilet; 06.02.2011 в 19:09.
Человек Панда вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему программа не работает в CodeBlock? AliveJuice Помощь студентам 5 20.06.2010 13:55
Почему не работает программа? St1mkA Помощь студентам 3 07.04.2010 19:51
подскажите почему программа не работает ZarakiKenpachi Общие вопросы C/C++ 5 05.11.2009 23:34
Подскажите почему не работает программа??? Danilyuk Помощь студентам 2 25.01.2008 10:15