Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


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

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

Купить рекламу на форуме 40000 рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2011, 14:10   #1
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию Нумерация кругов

Всем привет! Как сделать чтобы после обрисовки круга был номер 1, еще раз нажал появился круг с номером 2. У меня получается, но номер круга одно и тоже(((
Код:
var a:array [0..N]of string;
   i:integer;
/////////////////////////////////
  if Button = mbLeft then
     begin
       for I := 0 to N do
         begin
          a[i]:=IntToStr(i+1);
          PaintBox1.Canvas.TextOut(x-45,y-20,a[i]);
          PaintBox1.Canvas.Ellipse(X-40, Y-15, X+10, Y+35);
         end;
      end;

Последний раз редактировалось Lifefine; 05.02.2011 в 14:25.
Lifefine вне форума Ответить с цитированием
Старый 05.02.2011, 14:16   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

а если сделать:
Код:
var a:array [0..10]of string;
и согласно логике программы все равно будет виден прорисованный последний круг и номер соответственно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 05.02.2011 в 14:20.
Аватар вне форума Ответить с цитированием
Старый 05.02.2011, 14:24   #3
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию

У меня N константа. Другой логики ни как не определю((, хотя в гугле искал не нашел нужное.
По всякому пробовал). Может исправить ошибку?

Последний раз редактировалось Lifefine; 05.02.2011 в 14:27.
Lifefine вне форума Ответить с цитированием
Старый 05.02.2011, 15:21   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

поставь код в таимер
Код:
var
  Form1: TForm1;
  i:integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Timer2Timer(Sender: TObject);
begin
          inc(i);
          PaintBox1.Canvas.TextOut(45,20,IntToStr(i));
          PaintBox1.Canvas.Ellipse(40, 15, 10, 35);
          if i > 11 then Timer1.Enabled := False;
end;

end.
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 05.02.2011, 15:32   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

Вот примерчик рисования на одном и том же месте от 1 до 11. Можно модифицировать для прорисовки каждый раз на другм месте
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button: TButton;
    PaintBox: TPaintBox;
    procedure ButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    private lNumber: Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonClick(Sender: TObject);
begin
  PaintBox.Canvas.TextOut(45,20,IntToStr(lNumber+1)+'  ');
  PaintBox.Canvas.Ellipse(40,15,10,35);
  Inc(lNumber);
  if lNumber>10 then lNumber:=0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  lNumber:=0;
end;

end.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.02.2011, 18:29   #6
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию

всем большое спасибо что помогли мне!!!
Я решил другим способом) долго думая)
Вот код
Код:
var a:array [0..1000]of string;
begin
case mode of
  1:begin
     if Button = mbLeft then
     begin
       Inc(i);
       PaintBox1.Canvas.Ellipse(X-40, Y-15, X+10, Y+35);
       a[i]:=IntToStr(i);
       PaintBox1.Canvas.TextOut(x-45,y-20,a[i]);
     end;
    end;
end;
 end;
Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
 i:=0;
end;

Последний раз редактировалось Lifefine; 05.02.2011 в 18:31.
Lifefine вне форума Ответить с цитированием
Старый 05.02.2011, 19:02   #7
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию

пожалуйста подскажите, а как соединить линиями два круга? С помощью кода:
Код:
PaintBox1.Canvas.LineTo(x+30,y+40);
P.S. У меня рисуется линия но в другом месте((
Lifefine вне форума Ответить с цитированием
Старый 05.02.2011, 20:04   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

У канвы есть метод MoveTo (если не ошибаюсь), устанавливающий виртуальный карандашик в нужную позицию, а затем с помощью метода LineTo осуществляется прорисовка линии в позицию заданную его параметрами
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.02.2011, 20:17   #9
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

зачем вам Case?
и зачем массив строк, когда все его значения ранвы i, два раза одно и тоже
Код:
var
  Form1: TForm1;
  iR, iL: integer;

implementation

{$R *.dfm}


procedure TForm1.FormCreat(Sender: TObject);
begin
  iR:=0;
  iL:=0;
end;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    PaintBox1.Canvas.Ellipse(X-40, Y-15, X+10, Y+35);
    PaintBox1.Canvas.TextOut(x-45,y-20,IntToStr(iL)); // первыии елемент
    Inc(iL);
    PaintBox1.Canvas.MoveTo(x,y); // координаты начала линии
  end;
end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    PaintBox1.Canvas.LineTo(x,y);  // прорисовка линии, в координаты
    PaintBox1.Canvas.Rectangle(X-40, Y-15, X+10, Y+35); // если заменит на прорисовку стрелки то будет то что вам нужно
    PaintBox1.Canvas.TextOut(x-45,y-20,IntToStr(iR));       
    Inc(iR);
  end;
end;

end.
VirusN13

Последний раз редактировалось ArtGrek; 05.02.2011 в 22:34.
ArtGrek вне форума Ответить с цитированием
Старый 05.02.2011, 20:58   #10
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию

Аватар, спасибо тебе за подсказку!

Для ArtGrek, спасибо, за помощь! Дело в том что case мне нужен для выбора кнопок "Режим графа" и "Режим соединения", допустим при выборе "Режим графа" у меня рисуется круг, а при выборе "Режим соединения" соединяю 2 круга линиями. А поводу массива - спасибо, не додумался, щас исправлю у себя)
Чем разница между:
Код:
procedure TForm1.FormCreat(Sender: TObject);
begin
  iR:=0;
  iL:=0;
end;
и
Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
  iR:=0;
  iL:=0;
end;
?

Последний раз редактировалось Lifefine; 05.02.2011 в 21:02.
Lifefine вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
автоматическая нумерация Screame Microsoft Office Excel 4 31.07.2009 23:28
Нумерация строк ShnapS БД в Delphi 5 06.05.2009 19:59
Pascal. Площадь пересечения кругов TOSAgrk Помощь студентам 1 05.02.2009 04:23
Нумерация страниц Александр Microsoft Office Word 3 09.01.2009 14:22
Нумерация BВВ Microsoft Office Word 1 23.10.2008 04:07