Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-01-10

Re: Сложный тип данных 2

Здоровеньки булы, GENEMI!

9 января 2005 г., воскресенье, 22:58:32 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Сложный тип данных 2",
в котором сообщалось следующее:

G> А теперь как узнать что находится заполненным в MyF? то етсь что
G> именно было заполнено ( MyF := ...???; )

case MyF of
Sun: Showmessage('Sun');
Mandrake: Showmessage('Mandrake');
Microsoft: Showmessage('Microsoft');
else
Showmessage('Хм...');
end;

G> а что нет?

В смысле "а что нет?" если что-то оджно там лежит - другое не может.
Может тебе множества нужны? Вот так:
type
TMyType = (Sun, Microsoft, Mandrake);
var
MyS: set of TMyType; // множество
begin
MyS := []; // пустое множество
MyS := [Sun];
MyS := [Mandrake];
MyS := [Microsoft];
MyS := [Sun, Mandrake]; // множество содержит и Sun и Mandrake
if Sun in MyS then Showmessage('Sun');
if Mandrake in MyS then Showmessage('Mandrake');
if Microsoft in MyS then Showmessage('Microsoft');
end;

G> И какие вообще возможности дает программисту свой новый тип данных?

Дык, а тебе что надо? Программирование вообще много чего дает,
программу например свою написать можно ;)

   Александр Томилов 2005-01-10 22:52:01 (#294357)

Re: Ошибка при удалении обьекта. Delphi

> МГ> Я слышал, что форточка сама память очистить в состоянии?
> В состоянии. Но только если работа ведется в .Net например, в C#

По-моему, форточка прекрасно очищает память умирающего процесса, независмо
от того, написан ли он на C++ или C#. Причем, она очищает не только всю
занимаемую им память, но и остальные ресурсы, типа открытых файлов и прочих
системных ценностей.

Тем не менее, лучше, конечно, всю память освобождать самому. Вдруг, эта
программа будет потом использоваться как составная часть другой программы,
тогда мусор будет накапливаться в памяти и время от времени приводить к ее
переполнению. :-) Уж лучше сразу стараться быть аккуратным.

Номер выпуска : 3922
Возраст листа : 476 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/294344
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

   2005-01-10 22:42:04 (#294344)

Re: Сложный тип данных 2

> Ни как это не пойму:
> Я создаю такой перечисляемы тип:
> type
> TMyType = (Sun, Microsoft, Mandrake);
> ...
> var
> MyF: TMyType;
> ...
> MyF := Sun;
> MyF := Mandrake;
> MyF := Microsoft;
>
> А теперь как узнать что находится заполненным в MyF? то етсь что
> именно было заполнено ( MyF := ...???; ) а что нет?
> Возможно ли перечисляемы тип конвертировать в string, integer?
> И какие вообще возможности дает программисту свой новый тип данных?

Мне кажется, проблема в том, чтобы понять, что переменная типа TMyType может
содержать только одно из возможных значений в одно время, а не несколько
сразу. :-) Это ведь не массив и не список и даже не множество.

В каждый момент времени она равна либо Sun, либо Mandrake, либо, на худой
конец, Microsoft, но не их сочетанию.

А этот тип, кстати, не такой уж и сложный... Мне кажется, record - и тот
посложнее будет. :-|

Конвертировать в string - врятли (или можно любезно предоставленной janalex
функцией), а в integer, думаю, возможно... Может быть, ord() поможет... А
может и не быть... А может быть, integer()... Не юзирую паскакаль, не помню.

А что новый тип дает программисту - наверно, более простой/эффективный
способ организации своих данных. Ведь хороший алгоритм можно написать в
случае, если данные представлены в удобной для обработки форме.

Номер выпуска : 3921
Возраст листа : 476 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/294331
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

   2005-01-10 22:29:28 (#294331)

? > .obj

...::: Приветствую, All :::...

При компиляции исходника написанного на C++ Builder он требует
K32LIB.OBJ, а папке с исходником лежит только K32LIB.??? как в C++
Builder специальный файл перевести в OBJ ?

= = = = = = = = = = = = = = = = = = = =
...::: by GENEMI :::...

Номер выпуска : 3920
Возраст листа : 476 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/294295
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

   2005-01-10 21:34:14 (#294295)

Сложный тип данных 2

Ни как это не пойму:
Я создаю такой перечисляемы тип:
type
TMyType = (Sun, Microsoft, Mandrake);
...
var
MyF: TMyType;
...
MyF := Sun;
MyF := Mandrake;
MyF := Microsoft;

А теперь как узнать что находится заполненным в MyF? то етсь что
именно было заполнено ( MyF := ...???; ) а что нет?
Возможно ли перечисляемы тип конвертировать в string, integer?
И какие вообще возможности дает программисту свой новый тип данных?

...::: by GENEMI :::...

Номер выпуска : 3919
Возраст листа : 476 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/294294
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

   2005-01-10 21:34:09 (#294294)

Re: Ошибка при удалении обьекта. Delphi

Здравствуйте, Малышев.

Вы писали 10 января 2005 г., 20:10:58:

МГ> destructor TLPoint.Destroy;
МГ> var
МГ> i:integer;
МГ> begin
МГ> inherited Destroy;
МГ> bmp.Free;
МГ> for i:= 0 to l.Count-1 do
МГ> FreeMem(l.Items[i]);
МГ> l.Destroy;
МГ> end;
Вызывать унаследованный деструктор мы можем только после того, как удалим все
свои наработки. Вот и не будет проблем с памятью
begin
//inherited Destroy; // вырежем отсюда
bmp.Free;
for i:= 0 to l.Count-1 do
FreeMem(l.Items[i]);
l.Destroy;
inherited Destroy; // и вставим сюда
end;

МГ> Я слышал, что форточка сама память очистить в состоянии?
В состоянии. Но только если работа ведется в .Net например, в C#

   2005-01-10 21:33:55 (#294293)

Re: Ошибка при удалении обьекта. Delphi

Hello Малышев,

Monday, January 10, 2005, 4:10:58 PM, you wrote:

МГ> TLPoint=class (Tlabel)
МГ> public
МГ> a,b:double;
МГ> l:Tlist;
МГ> . . .
МГ> constructor Create(com:Tcomponent); override;
МГ> destructor Destroy;
МГ> . . .
МГ> end;
МГ> МГ> constructor TLPoint.Create(com:Tcomponent);
МГ> begin
МГ> inherited create(com);
МГ> bmp:=Tbitmap.Create;
МГ> l:=Tlist.Create;
МГ> end;
МГ> МГ> destructor TLPoint.Destroy;
МГ> var
МГ> i:integer;
МГ> begin
МГ> inherited Destroy;
МГ> bmp.Free;
МГ> for i:= 0 to l.Count-1 do
МГ> FreeMem(l.Items[i]);
МГ> l.Destroy;
МГ> end;

МГ> procedure Tform1.DestroyForm(sender:Tobject);
МГ> var
МГ> i:integer;
МГ> begin
МГ> for i:= 0 to listP.Count-1 do
МГ> begin
МГ> TlPoint(listP.Items[i]).Destroy;
МГ> end;
МГ> listP.Free;
МГ> end;
МГ> МГ> Так вот, если все обьекты созданны и добавленны в Unit1, то всё работает
как
МГ> надо!!!
МГ> Но вот если, хоть один обьект TlPoint создан и добавлен из другого модуля,
МГ> то при уничтожении выскакивает куча ошибок обращения к памяти?!
МГ> --
МГ> В процесси работы пре обращении к обьектам из списка тоже без ошибок
МГ> (TlPoint(listP.Items[i].color:=clBlack).
МГ> --
МГ> Если убрать код Tlpoint.Destroy, то тоже всё ок.
МГ> Я вот думаю, моджет вообще обьекты по окончанию работы программы не
МГ> уничтожать?
МГ> Я слышал, что форточка сама память очистить в состоянии?

Мне кажется, что-то не так в самом деструкторе списка и наверное в
обработчике уничтожения формы (то есть, в двух последних методах,
которые я оставил в теле письма). Непонятно, почему используется цикл
МГ> for i:= 0 to l.Count-1 do
МГ> FreeMem(l.Items[i]);
МГ> l.Destroy;
в деструкторе списка. Разве просто l.Free недостаточно? Тем более, при
создании списка не употреблялось GetMem.
И в DestroyForm тоже сомнителен цикл
МГ> for i:= 0 to listP.Count-1 do
МГ> begin
МГ> TlPoint(listP.Items[i]).Destroy;
МГ> end;
МГ> listP.Free;
По крайней мере, здесь-то уж точно деструктор явно не должен
вызываться.

А что касается самоочистки, то да - есть такое дело. По идее, по
закрытии главного окна приложения, все указатели этого приложения
освобождаются. Но на это можно положиться, если в приложении по ходу
дела не придется перестраевать список.

   Вадим Шешунов 2005-01-10 19:56:19 (#294246)

Ошибка при удалении обьекта. Delphi

Привет ALL!
Имееться класс:
TLPoint=class (Tlabel)
public
a,b:double;
l:Tlist;
. . .
constructor Create(com:Tcomponent); override;
destructor Destroy;
. . .
end;
constructor TLPoint.Create(com:Tcomponent);
begin
inherited create(com);
bmp:=Tbitmap.Create;
l:=Tlist.Create;
end;
destructor TLPoint.Destroy;
var
i:integer;
begin
inherited Destroy;
bmp.Free;
for i:= 0 to l.Count-1 do
FreeMem(l.Items[i]);
l.Destroy;
end;
В самой программе выполняеться что-то вроде:
var
ListP:Tlist; {Глобальная, в модуле Unit1}
procedure ADD; {Unit1}
var
Lpoint:TLpoint;
begin
Lpoint:=Tlpoint.create(self);
Lpoint.Parant:=form1;
....
ListP.add(Lpoint);
end;
procedure ADD; {Unit2}
var
Lpoint:TLpoint;
begin
Lpoint:=Tlpoint.create(self);
Lpoint.Parant:=form2;
....
ListP.add(Lpoint);
end;
procedure Tform1.DestroyForm(sender:Tobject);
var
i:integer;
begin
for i:= 0 to listP.Count-1 do
begin
TlPoint(listP.Items[i]).Destroy;
end;
listP.Free;
end;
Так вот, если все обьекты созданны и добавленны в Unit1, то всё работает как
надо!!!
Но вот если, хоть один обьект TlPoint создан и добавлен из другого модуля,
то при уничтожении выскакивает куча ошибок обращения к памяти?!
--
В процесси работы пре обращении к обьектам из списка тоже без ошибок
(TlPoint(listP.Items[i].color:=clBlack).
--
Если убрать код Tlpoint.Destroy, то тоже всё ок.
Я вот думаю, моджет вообще обьекты по окончанию работы программы не
уничтожать?
Я слышал, что форточка сама память очистить в состоянии?

Номер выпуска : 3916
Возраст листа : 476 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/294131
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

   2005-01-10 17:09:35 (#294131)

Re: Сложный тип данных.

Здравствуйте, GENEMI.

Вы писали 9 января 2005 г., 16:12:34:
G> И как результат функции - которая возвращает значение типа
G> TConnectionType - перевести в строку?

Можно так
function ConnectionTypeToString(a: TConnectionType): string;
begin
case a of
ctNone: Rresult:="None";
ctDialup: Rresult:="Dialup";
end;
end;

Переменная типа TConnectionType реально в памяти имеет тип Word,
Поэтому в строку напрямую не переводится.

   2005-01-10 14:01:52 (#294030)