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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 19.11.2012, 12:59
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

когда напишешь так
Код:
property uchastok: tuchastok_array // и здесь                        
read fuchastok                        
write fuchastok;
то получишь огромные грабли в виде того, что писать uchastok можно будеть только целиком всем массивом.
То есть нужно либо оставить только свойство для чтения(при этом модифицировать элементы массива будет возможно), либо сделать более сложные телодвижения типа таких

Код:
tbalka=class         
  private                
    fuchastok: array of tuchastok;
    fshema:tcanvas;
    function GetUchastok(index:Integer):tuchastok;
    procedure SetUchastok(index:Integer; value :tuchastok);    
    procedure setshema(value:tcanvas);
  public
   property uchastok [index:integer]: tuchastok 
       read GetUchastok
       write SetUchastok;                
   property shema:tcanvas
      write setshema;     
end;
но опять же, модифицировать uchastok[i] можно будеть только целиком :
вот так
Код:
var 
  uchastok:tuchastok;

uchastok:=balka.uchastok[i];
uchastok.fdlina:=10;
balka.uchastok[i]:=uchastok;

а вто так
Код:
balka.uchastok[i].fdlina:=10;
уже будет нельзя.

То есть лучше оставить только свойство для чтения, повторяюсь, при этом модифицировать элементы массива будет возможно:
Код:
balka.uchastok[i].fdlina:=10;

Индексированное свойство нужно делать, когда элементы являются ссылочными типами, например классами.
Ответить с цитированием
  #32  
Старый 19.11.2012, 13:03
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

В догонку - не усмотрел, что tuchastok у вас класс. Тогда мой комментарий на тему невозможность вот этого кода
Код:
balka.uchastok[i].fdlina:=10;
отменяется. комментарий по поводу
Код:
write fuchastok;
остаётся в силе
Ответить с цитированием
  #33  
Старый 21.01.2013, 18:15
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Ужас, после работы несколько месяцев, вернулся к изучению delphi многое подзабыл, сейчас буду вспоминать, может книжку акую посоветуете по классам рименимо к данной теме)
Ответить с цитированием
  #34  
Старый 21.01.2013, 19:58
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Цитата:
Сообщение от poli-smen
Свойства могут быть только заранее определённых типов.
Т.е. в твоём случае:
Код:
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;

не очень удобно тогда получается
а разве в предыдущем модуле он не определен? или можно как то его определить не создавая новый тип данных?
я же присваиваю значение из другого модуля
Код:
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;

какое-то масло масленное получается
Код:
tuchastok1=tuchastok;
    tbalka=class
         private
                fuchastok:array of tuchastok1;
                fshema:tcanvas;
         public
               property uchastok:array of tuchastok1
                       read fuchastok
                       write fuchastok;
               procedure setshema(value:tcanvas);
               property shema:tcanvas
                       write setshema;
    end;

Последний раз редактировалось Pavel_Aleksandrovich, 21.01.2013 в 20:28.
Ответить с цитированием
  #35  
Старый 21.01.2013, 20:13
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
Сообщение от Pavel_Aleksandrovich
Ужас, после работы несколько месяцев, вернулся к изучению delphi многое подзабыл, сейчас буду вспоминать, может книжку акую посоветуете по классам рименимо к данной теме)
Лучше просто книгу по Делфи, а не применимо к этой теме. Применимо к этой теме - посоветовать могу только одно: получше разобраться, что именно требуется от проекта, а то так тебе трудно помочь - охоты нет, если ты даже не знаешь, куда идти.

http://www.softportal.com/software-4...odvinutih.html
Как на меня, отличный учебник, даже кажись примеры есть. Первая глава. Насчет графики - здесь школьный курс геометрии в помощь.
Ответить с цитированием
  #36  
Старый 21.01.2013, 20:34
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Цитата:
Сообщение от YVitaliy
Лучше просто книгу по Делфи, а не применимо к этой теме. Применимо к этой теме - посоветовать могу только одно: получше разобраться, что именно требуется от проекта, а то так тебе трудно помочь - охоты нет, если ты даже не знаешь, куда идти.

http://www.softportal.com/software-4...odvinutih.html
Как на меня, отличный учебник, даже кажись примеры есть. Первая глава. Насчет графики - здесь школьный курс геометрии в помощь.

разобраться можно во всем главное найти грамотно изложенную информацию, например мне нужно знать
1) правила создания классов (не просто как написано у культина или фленова объект класс инкапсуляция, полиморфизм, наследование, и пример какого то легкого класса который по сути ни чего не может а прям по полочкам разложенное чтоб я мог самостоятельно его создать, используя другие модули классы и тп и тд)
2) правила работы с этими классами, в этом модуле в другом и тп

Последний раз редактировалось Pavel_Aleksandrovich, 21.01.2013 в 20:38.
Ответить с цитированием
  #37  
Старый 21.01.2013, 20:54
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Я лично во всем разобрался, разбирая VCL - шные модуля Делфи. Там многому можно научиться, главное знать, что искать . А так, с нуля врядли что-то получится.
Нужно самому пробовать что-либо создать, но более простое. Тогда поймешь и правила создания (че за правила?), и правила работы (приемы).
Берешь книгу, где рассматривается пример, и делаешь этот пример сам, иногда "подглядывая" в книгу. Репетитора же нанимать не хочешь?
Ответить с цитированием
  #38  
Старый 25.01.2013, 12:02
Pavel_Aleksandrovich Pavel_Aleksandrovich вне форума
Прохожий
 
Регистрация: 02.09.2012
Сообщения: 31
Репутация: 9
По умолчанию

Цитата:
Сообщение от YVitaliy
Я лично во всем разобрался, разбирая VCL - шные модуля Делфи. Там многому можно научиться, главное знать, что искать . А так, с нуля врядли что-то получится.
Нужно самому пробовать что-либо создать, но более простое. Тогда поймешь и правила создания (че за правила?), и правила работы (приемы).
Берешь книгу, где рассматривается пример, и делаешь этот пример сам, иногда "подглядывая" в книгу. Репетитора же нанимать не хочешь?


Так на примерах и учу по Культину (основы программирование в Delphi7), в плане ООП там достаточно мало инфы вот, алгоритм создания нужного мне класса выше написан там ошибки, вот и ищу такую литературу чтобы при написании не делать таких ошибок, репетитор классная штука, но здесь нужен такой человек который умеет учить был опыт работы с репетитором не очень удачный, а уметь учить и знать это разные вещи инфу необходимо выдавать доступно)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter