![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Код:
type TMyStr = record str: array of string; count: integer end; var MyStr: TMyStr; я заранее не знаю какой размерности будет массив строк, поэтому я каждый раз при добавлении элементов задаю ему длину setlength Код:
setlength(mystr,1); MyStr[0].str:= 'xexe'; MyStr[0].count:=1; Это не удобно. Как сделать чтобы был метод, как например у Tstrings add(string) ? чтобы я мог пользоваться такой конструкцией MyStr.add('xexe'); и метод Add сам увеличивает размерность массива на 1, вносит в последний элемент строку "xexe" и увеличивает счетчик на 1. |
|
#2
|
||||
|
||||
|
Или создавай тип
Код:
type TMyStr = object str: array of string; count: integer Procedure Add(const text:string); end; Код:
type TMyStr = class() public str: array of string; count: integer; Procedure Add(const Text:string); end; ЗЫ Метод реализовуй в разделе implementation Код:
Procedure TMyStr.Add(const Text:String); begin inc(count); setLength(str, count); str[count-1]:=Text; end; Последний раз редактировалось YVitaliy, 16.10.2012 в 12:58. |
| Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
Евгений79 (16.10.2012)
| ||
|
#3
|
|||
|
|||
|
Никогда не создавал доселе классов с методами.
Покажите полный код пожалуйста. |
|
#4
|
||||
|
||||
|
Код:
unit TestUnit;
interface
type TMyStr = class(TObject)
public
str: array of string;
count: integer;
Procedure Add(const Text:string);
end;
implementation
{ TMyStr }
procedure TMyStr.Add(const Text: string);
begin
inc(count);
setLength(str, count);
str[count-1]:=Text;
end;
end.И, например, в обработчике OnCreate главной формы (или при старте программы) создаем обьект Код:
var strObj:TMyStr;
.........
procedure TForm1.FormCreate(Sender: TObject);
begin
strObj:=TMyStr.Create;
end;
//И добавляем запись
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
s:='';
if inputQuery('Добавление текста','Введите текст',s) then
strObj.add(s);
end;
|
| Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
Евгений79 (16.10.2012)
| ||
|
#5
|
|||
|
|||
|
Без отдельного юнита не обойтись?
|
|
#6
|
||||
|
||||
|
Обойтись, просто записать фрагменты кода в соответствующие места основного юнита. Но разницы не вижу.
|
| Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение: | ||
Евгений79 (16.10.2012)
| ||
|
#7
|
||||
|
||||
|
Можешь обьявлять и реализовать в любом юните. В юните с формой точно так же обьявляется и реализуется главная форма. Свой класс обьявляй параллельно с ней.
|
| Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
Евгений79 (16.10.2012)
| ||