Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 28.10.2012, 10:32
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Цитата:
Сообщение от Pyro
а что прога сможет делать без этого?
алгоритм решения зависит от схемы, но проге не обязательно понимать что нарисованно, я не пишу универсальную программу, которая будет расчитывать любые схемы, секрет в том что всего методов расчета около 10 разных их можно описать процедурно, а понять какой метод расчета применить можно по некоторым критериям например по количеству опор и тп
Ответить с цитированием
  #17  
Старый 10.11.2012, 01:42
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Друзья попробывал создать класс, и нарисовать балку разного сечения 3 участка
что получилось естественно не компилирует, подскажите где ошибки
Код:
unit Unit1;

interface

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

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

tuchastok=class
          private
                 fdlina:real;
                 fploshad:real;
          public
                property dlina:real
                        read fdlina
                        write fdlina;
                property ploshad:real
                        read fploshad
                        write fploshad;
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
   uchastok:array of tuchastok;
   x:array of integer;
   y:array of integer;
   y_os:integer;
   i, j:integer;

begin
     x[0]:=100;
     y[0]:=100;

     for i:=1 to 3 do
        begin
             uchastok[i].dlina:=3*i;
             uchastok[i].ploshad:=2*i;
        end;

     y_os:=y[0]+round((uchastok[1].ploshad*10)/2);

     i:=1;
     for j:=1 to 5 do
        begin
             if (j mod 2)>0
               then
                   begin
                        x[j]:=round(uchastok[i].dlina*100);
                        x[j+1]:=round(uchastok[i].dlina*100);
                        i:=i+1;
                   end;
        end;

     i:=1;
     for j:=1 to 5 do
        begin
             if j=1
               then
                   begin
                        y[j]:=y_os+round((uchastok[i].ploshad*10)/2);
                        i:=i+1;
                   end
               else
                   begin
                        if (j mod 2)=0
                          then
                              begin
                                   y[j]:=y_os-round((uchastok[i].ploshad*10)/2);
                                   y[j+1]:=y_os+round((uchastok[i].ploshad*10)/2);
                                   i:=i+1;
                              end;
                   end;
        end;

     for i:=0 to 4 do
        begin
             form1.Canvas.Rectangle(x[i], y[i], x[i+1], y[i+1]);
        end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     tuchastok.Create;
end;

end.

что интересует
правильно ли работаю с классом
почему не могу уничтожить данные которые хранит объект free и destroy не понимает
Ответить с цитированием
  #18  
Старый 10.11.2012, 01:55
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Много ошибок. Конструктор Create нужно вызывать для каждого обьекта, с которым будешь работать, тоесть, если они у тебя в динамическом массиве, то типа так:
Код:
setlength(uchastok, 3); //размер массива становится 3, от 0 до 2
 for i:=0 to 2 do
   uchastok[i]:=TUchastok.Create; //для классов конструктор нужно вызывать так.

и вот здесь работаем с объектами.... не забывая, что в динамическом массиве индекс начинается с 0 и оканчивается {длина массива-1}
Ответить с цитированием
  #19  
Старый 10.11.2012, 02:15
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Все-таки нужно немного подучиться, а потом и что-то писать. Если нужна помощь, то нужно спрашивать, а не раз в месяц постить одно и то же, и снова молчать. Эта тема была, кажись, открыта в августе (учитывая предыдущую), а прогресса - 0.
Вложения
Тип файла: rar testbalka.rar (1.8 Кбайт, 2 просмотров)
Ответить с цитированием
  #20  
Старый 10.11.2012, 11:30
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Цитата:
Сообщение от YVitaliy
Все-таки нужно немного подучиться, а потом и что-то писать. Если нужна помощь, то нужно спрашивать, а не раз в месяц постить одно и то же, и снова молчать. Эта тема была, кажись, открыта в августе (учитывая предыдущую), а прогресса - 0.

Ну вот учусь, пишу, вы подсказываете
Ответить с цитированием
  #21  
Старый 12.11.2012, 14:47
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Доброе время суток

Исправил ошибки предыдущего кода все работает
Код:
unit Unit1;

interface

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

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

tuchastok=class
          private
                 fdlina:real;
                 fploshad:real;
          public
                property dlina:real
                        read fdlina
                        write fdlina;
                property ploshad:real
                        read fploshad
                        write fploshad;
end;

var
  Form1: TForm1;
  uchastok:array of tuchastok;
  
implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
   i, j:integer;
   x:array of integer;
   y:array of integer;
   y_os:integer;

begin
     setlength(x, 7);
     setlength(y, 7);

     x[0]:=100;
     y[0]:=100;

     for i:=0 to 2 do
        begin
             uchastok[i].dlina:=3*i+2;
             uchastok[i].ploshad:=2*i+2;
        end;

     y_os:=y[0]+round((uchastok[0].ploshad*10)/2);

     i:=0;
     for j:=1 to 5 do
        begin
             if (j mod 2)>0
               then
                   begin
                        x[j]:=round(uchastok[i].dlina*100);
                        x[j+1]:=round(uchastok[i].dlina*100);
                        i:=i+1;
                   end;
        end;

     i:=0;
     for j:=1 to 5 do
        begin
             if j=1
               then
                   begin
                        y[j]:=y_os+round((uchastok[i].ploshad*10)/2);
                        i:=i+1;
                   end
               else
                   begin
                        if (j mod 2)=0
                          then
                              begin
                                   y[j]:=y_os-round((uchastok[i].ploshad*10)/2);
                                   y[j+1]:=y_os+round((uchastok[i].ploshad*10)/2);
                                   i:=i+1;
                              end;
                   end;
        end;

     for i:=0 to 4 do
        begin
             form1.Canvas.Rectangle(x[i], y[i], x[i+1], y[i+1]);
        end;

end;

procedure TForm1.FormCreate(Sender: TObject);
var
   i:integer;
begin
     setlength(uchastok, 3);
     for i:=0 to 2 do
        begin
             uchastok[i]:=tuchastok.Create;
        end;
end;

end.


теперь данный алгоритм надо вынести в отдельный модуль
написал, вот что получилось

1 модуль
Код:
unit tuchastok;

interface

uses Controls, StdCtrls, SysUtils, Dialogs;

type
    tuchastok=class
         private
                fdlina:real;
                fploshad:real;
         public
                property dlina:real
                        read fdlina
                        write fdlina;
                property ploshad:real
                        read fploshad
                        write fplshad;
    end;

implementation

end.


2 модуль
Код:
unit balka;

interface

uses Controls, StdCtrls, SysUtils, Dialogs;

type
    tbalka=class
         private
                fuchastok:array of tuchastok;
                fshema:tcanvas;
                procedure setshema(value:tcanvas);
         public
               property uchastok:array of tuchastok
                       read fuchastok
                       write fuchastok;
               property shema:tcanvas
                       write setshema;
    end;

implementation

uses tuchastok;

procedure tbalka.setshema(value:tcanvas);
         var
            x:array of integer;
            y:array of integer;
            y_os:integer;
            i, j:integer;

         begin
              setlength(uchastok, 3);
              setlength(x, 7);
              setlength(y, 7);

              x[0]:=100;
              y[0]:=100;

              y_os:=y[0]+round((uchastok[0].ploshad*10)/2);

              i:=0;
              for j:=1 to 5 do
                 begin
                      if (j mod 2)>0
                        then
                            begin
                                 x[j]:=round(uchastok[i].dlina*100);
                                 x[j+1]:=round(uchastok[i].dlina*100);
                                 i:=i+1;
                            end;
                 end;

              i:=0;
              for j:=1 to 5 do
                 begin
                      if j=1
                        then
                            begin
                                 y[j]:=y_os+round((uchastok[i].ploshad*10)/2);
                                 i:=i+1;
                            end
                        else
                            begin
                                 if (j mod 2)=0
                                   then
                                       begin
                                            y[j]:=y_os-round((uchastok[i].ploshad*10)/2);
                                            y[j+1]:=y_os+round((uchastok[i].ploshad*10)/2);
                                            i:=i+1;
                                       end;
                            end;
                 end;

              for i:=0 to 4 do
                 begin
                      value.Rectangle(x[i], y[i], x[i+1], y[i+1]);
                 end;
              shema:=value;

end.

3 модуль
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

uses balka, tuchastok;

{$R *.dfm}
var
   balka:tbalka;

procedure TForm1.FormCreate(Sender: TObject);
begin
     balka:=tbalka.create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     with balka do
         begin
              uchastok[0].dlina:=0.6;
              uchastok[0].ploshad:=2*30;
              uchastok[1].dlina:=0.4;
              uchastok[1].ploshad:=30;
              uchastok[2].dlina:=0.5;
              uchastok[2].ploshad:=30;
         end;

     balka.setshema(form1.canvas);

end;

end.

естественно не компилирует жду от вас помощи
Ответить с цитированием
  #22  
Старый 12.11.2012, 14:53
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Pavel_Aleksandrovich
естественно не компилирует жду от вас помощи
Не помню такого чтобы Delphi молча не компилировал. Обычно он пишет причину по которой не может выполнить компиляцию. После устранения этих причин компиляция как правило успешно выполняется.
Ответить с цитированием
  #23  
Старый 12.11.2012, 14:59
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Цитата:
Сообщение от poli-smen
Не помню такого чтобы Delphi молча не компилировал. Обычно он пишет причину по которой не может выполнить компиляцию. После устранения этих причин компиляция как правило успешно выполняется.

пишет что во 2 модуле нет идентификатора
uchastok
tcanvas

[Error] balka.pas(10): Undeclared identifier: 'tuchastok'

может uses надо модуль добавить какой-то?
Ответить с цитированием
  #24  
Старый 12.11.2012, 15:01
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Pavel_Aleksandrovich
пишет что во 2 модуле нет идентификатора
uchastok
tcanvas

[Error] balka.pas(10): Undeclared identifier: 'tuchastok'

может uses надо модуль добавить какой-то?
Именно так и нужно сделать. Только не "какой-то", а именно те в которых описаны эти идентификаторы.
Ответить с цитированием
  #25  
Старый 12.11.2012, 15:19
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Цитата:
Сообщение от poli-smen
Именно так и нужно сделать. Только не "какой-то", а именно те в которых описаны эти идентификаторы.

во 2 модуле есть uses tuchastok (модуль 2 строка 23)
там описан этот класс
Ответить с цитированием
  #26  
Старый 12.11.2012, 15:22
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Код:
uses tuchastok;
необходимо ПЕРЕД обращением к этому типу, а именно после interface
там, где описаны
Код:
uses Controls, StdCtrls, SysUtils, Dialogs;
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #27  
Старый 12.11.2012, 15:30
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Цитата:
Сообщение от cotseec
Код:
uses tuchastok;
необходимо ПЕРЕД обращением к этому типу, а именно после interface
там, где описаны
Код:
uses Controls, StdCtrls, SysUtils, Dialogs;

возникает другая ошибка (модуль 1 строка 8) повторно описано имя tuchastok, оно вроде только одно
Ответить с цитированием
  #28  
Старый 12.11.2012, 15:37
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Pavel_Aleksandrovich
возникает другая ошибка (модуль 1 строка 8) повторно описано имя tuchastok, оно вроде только одно
Попробуй дать имена модулям отличными от имён классов. Так модуль tuchastok переименуй например в UchastokUnit.
Ответить с цитированием
  #29  
Старый 12.11.2012, 19:22
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Цитата:
Сообщение от poli-smen
Попробуй дать имена модулям отличными от имён классов. Так модуль tuchastok переименуй например в UchastokUnit.


теперь другие ошибки [Error] BalkaUnit.pas(15): Identifier expected but 'ARRAY' found
Ответить с цитированием
  #30  
Старый 16.11.2012, 13:49
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Pavel_Aleksandrovich
теперь другие ошибки [Error] BalkaUnit.pas(15): Identifier expected but 'ARRAY' found
Свойства могут быть только заранее определённых типов.
Т.е. в твоём случае:
Код:
type
    tuchastok_array = array of tuchastok; // Объявляем новый тип

    tbalka=class
         private
                fuchastok: tuchastok_array; // Теперь используем его здесь
                fshema:tcanvas;
                procedure setshema(value:tcanvas);
         public
               property uchastok: tuchastok_array // и здесь
                       read fuchastok
                       write fuchastok;
               property shema:tcanvas
                       write setshema;
    end;

Последний раз редактировалось poli-smen, 16.11.2012 в 13:57.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter