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

RusFAQ.ru: Программирование на Delphi


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Шичко Игорь
Статус: Практикант
Рейтинг: 196
∙ повысить рейтинг >>
Шевченко Дмитрий
Статус: 5-й класс
Рейтинг: 49
∙ повысить рейтинг >>
Виктор Пырлик
Статус: Профессионал
Рейтинг: 47
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 1245
от 03.12.2008, 03:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 407, Экспертов: 51
В номере:Вопросов: 8, Ответов: 8

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 151996: Здравствуйте! Помогите пожалуйста с теорией. 1. Назвите основные методы методы базового класса TObject? 2. В чём состоит отличие конструкторов, деструкторов от других методов класса? 3. Какой функцией можно заменить функцию InstanceSize?...


Вопрос № 152014: Здравствуйте! Наведите пожалуйста примеры использования этих методов. ClassName - Получить имя класса объекта. ClassParent - Получить родительский класс объекта. ClassType - Получить действительный тип объекта. Create - Сконструировать но...
Вопрос № 152017: Здравствуйте Denisss, очень понравился Ваш предыдущий ответ, не моглы бы Вы помочь мне с созданием простенького класа Apple c несколькими полями и использованием функций Set и Get. Пасиб за помощь. <img src="http://rusfaq.ru/images/Forum/1.gif" borde...
Вопрос № 152019: здраствуйте можете п омоч с задачей..у меня в субботу экзамен..а я некаторые не могу зделать..вот одна из них: Создайте приложение, на форму которого помещены компоненты: Button и PaintBox. Для компонента Button создайте обработчик события OnCl...
Вопрос № 152025: Здрасте снова..спс за прошлую задачу..вот есчо одна!!заранее спс_)) Создайте приложение, на форму которого помещены компоненты: Timer и Button. При нажатии на кнопку Button включается таймер. В обработчике события OnTimer компонента Timer ...
Вопрос № 152072: Помогите плиз разобраться с циклом. procedure TForm1.Button1Click(Sender: TObject); var FUin, FPas, str:string; k:LongInt; begin for k:=0 to listbox1.Count -1 do begin str:=listbox1.items[k]; FUin := Copy(str, 0, Pos(&...
Вопрос № 152084: Здравствуйте!!! Помогите, пожалуйста!!!! Задание было такое: Если в результате замены отрицательных элемен тов массива их квадратами элементы массива по строкам образуют убывающую последовательность, то найти сумму элементов каждой строки, иначе...
Вопрос № 152123: Здравствуйте! Объясните пожалуйста зачем для метода InstanceSize нужно использовать функцию IntToStr ?...

Вопрос № 151.996
Здравствуйте! Помогите пожалуйста с теорией.
1. Назвите основные методы методы базового класса TObject?
2. В чём состоит отличие конструкторов, деструкторов от других методов класса?
3. Какой функцией можно заменить функцию InstanceSize?
Отправлен: 27.11.2008, 01:18
Вопрос задал: compile (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Denisss

Здравствуйте, Compile!

1. Методы класса TObject:
Код:
ClassName - Получить имя класса объекта.
ClassParent - Получить родительский класс объекта.
ClassType - Получить действительный тип объекта.
Create - Сконструировать новый объект.
DefaultHandler - Данная виртуальная функция не имеет реализации - на уровне T0bject она ничего не делает.
Destroy - Разрушить объект
Free - Разрушить объект, сконструированный Create.
InheritsFrom - Определить, порожден ли объект от определенного класса.
InstanceSize - Определить количество памяти, отведенное объекту.
Источник >&g t;>

2. Конструктор (constructor) - особый метод класса, обеспечивающий инициализацию объектов этого класса. Обычно имеет имя Create и вызывается следующим образом:
<имя инициализируемого объекта> := <имя класса>.Create(<список параметров>);
Особенность вызова конструктора - он вызывается с помощью ссылки на класс, а не на экземпляр класса (в отличие от других методов, которые вызываются с помощью ссылки на объект). Иначе просто нельзя - ведь экземпляр объекта в момент вызова конструктора еще не создан. Код конструктора класса статичен и находится в памяти. Он относится к классу, а не к его экземпляру. [Программирование в среде Delphi 2005. Самоучитель, стр. 120]

Деструктор (destructor) - особый метод класса, обеспечивающий разрушение объектов этого класса (и, в частности, освобождение занимаемой ими обл асти в динамической памяти). Обычно имеет имя Destroy. Вызов деструктора, как правило, выполняется с помощью вспомогательного метода Free. Особенностью метода Free является то, что он не выполняет никаких действий, если значение объекта равно nil (вызов в такой ситуации деструктора Destroy приводит к исключительной ситуации EAccessViolation). Заметим, что автоматического присваивания объекту значения nil при разрушении данного объекта не происходит. В отличие от вызова конструктора, вызов деструктора выполняется с помощью ссылки на экземпляр, а не на тип.

Заметьте, что нет необходимости всегда объявлять и описывать конструкторы и деструкторы. Все классы языка Delphi неявно наследуют функциональные возможности базового класса TObject, причем независимо, указано ли это наследование явно. [стр. 121]

3. InstanceSize возвращает количество байт, требуемое для размещения каждого экземпляра объекта, который вызывает метод InstanceSize. Это внутренняя функ ция и обычно разработчиками не применяется. Вместо нее используйте функцию sizeof.
Источник >>>

Удачи!
---------
Все должно быть сделано настолько просто, насколько это возможно. Но не проще. (с) А.Эйнштейн
Ответ отправил: Denisss (статус: Профессор)
Россия, Москва
ICQ: 281599577
----
Ответ отправлен: 27.11.2008, 10:24

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 236866 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5
    Комментарий оценки:
    Вот это не то, что ответ - ОТВЕТИЩЕ, спасибо за помощь!


    Вопрос № 152.014
    Здравствуйте! Наведите пожалуйста примеры использования этих методов.
    ClassName - Получить имя класса объекта.
    ClassParent - Получить родительский класс объекта.
    ClassType - Получить действительный тип объекта.
    Create - Сконструировать новый объект.
    DefaultHandler - Данная виртуальная функция не имеет реализации - на уровне T0bject она ничего не делает.
    Destroy - Разрушить объект
    Free - Разрушить объект, сконструированный Create.
    InheritsFroin - Определить, порожден ли объект от определенного класса.
    InstanceSize
    Отправлен: 27.11.2008, 11:48
    Вопрос задал: compile (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Denisss

    Здравствуйте, compile!

    В приложении находится консольный проект (File -> New -> Other... -> Console Application), содержащий примеры использования вышеприведенных методов.

    Удачи!

    Приложение:

    ---------
    Все должно быть сделано настолько просто, насколько это возможно. Но не проще. (с) А.Эйнштейн

    Ответ отправил: Denisss (статус: Профессор)
    Россия, Москва
    ICQ: 281599577
    ----
    Ответ отправлен: 28.11.2008, 22:22

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 237021 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5
    Комментарий оценки:
    Большое спасибо за ответ


    Вопрос № 152.017
    Здравствуйте Denisss, очень понравился Ваш предыдущий ответ, не моглы бы Вы помочь мне с созданием простенького класа Apple c несколькими полями и использованием функций Set и Get. Пасиб за помощь.
    Отправлен: 27.11.2008, 11:51
    Вопрос задал: compile (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Denisss

    Здравствуйте, compile!

    В приложении пример консольного проекта (File -> New -> Other... -> Console Application) с реализацией "простенького" класса TApple.
    Класс TApple имеет скрытые поля weight_ и color_ (вес и цвет), методы Set (SetWeight, SetColor), Get (GetWeight, GetColor) и свойства Weight и Color для удобного доступа к полям.
    Функция toOEM используется для преобразования системной кодировки (Windows-1251) в OEM-кодировку (для консольного режима обычно применяется кодировка cp866).

    Если захотите перенести класс в отдельный модуль (unit, файл модуля имеет расширение .pas), то объявление класса должно находиться до ключевого слова implementation, а его описание - после. Функцию toOEM также нужно поставить после implementation (для GUI-приложения эта функция вовсе не нужна).

    Удачи!

    Приложение:

    ---------
    Все должно быть сделано настолько просто, насколько это возможно. Но не проще. (с) А.Эйнштейн

    Ответ отправил: Denisss (статус: Профессор)
    Россия, Москва
    ICQ: 281599577
    ----
    Ответ отправлен: 28.11.2008, 23:04

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 237026 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5
    Комментарий оценки:
    Ну что могу сказать?!?!?! Вы просто радуете своими ответами. СПАСИБО


    Вопрос № 152.019
    здраствуйте можете помоч с задачей..у меня в субботу экзамен..а я некаторые не могу зделать..вот одна из них:
    Создайте приложение, на форму которого помещены компоненты: Button и PaintBox.
    Для компонента Button создайте обработчик события OnClick. В его теле напишите код, который рисует на компоненте PaintBox 1000 точек случайными цветами. Также точки должны быть случайным образом распределены по всей области компонента PaintBox.
    Отправлен: 27.11.2008, 13:02
    Вопрос задал: StreetBit (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 2)

    Отвечает: Genia007
    Здравствуйте, StreetBit!
    Вот накидал процедуру, по нажатию кнопки выводится 1000 точек в произвольное место PaintBox и произвольным цветом:

    procedure TForm1.Button1Click(Sender: TObject);
    var
    i: word;
    begin
    Randomize;
    for i:= 1 to 1000 do
    begin
    PaintBox1.Canvas.Pixels[random(paintbox1.Width), random(paintbox1.Height)]:= random(19999999);
    end;
    end;
    ---------
    Помогли тебе, помоги и ты.
    Ответ отправил: Genia007 (статус: Студент)
    Ответ отправлен: 27.11.2008, 13:49

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 236875 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5
    Комментарий оценки:
    спасиб,оч помогли)


    Вопрос № 152.025
    Здрасте снова..спс за прошлую задачу..вот есчо одна!!заранее спс_))
    Создайте приложение, на форму которого помещены компоненты: Timer и Button.
    При нажатии на кнопку Button включается таймер.
    В обработчике события OnTimer компонента Timer с интервалом в 2 секунды происходит случайное изменение положения компонента Button в пределах формы. При повторном нажатии на кнопку интервал таймера уменьшается в два раза, при ещё одном нажатии — ещё в два раза и так далее.
    Отправлен: 27.11.2008, 14:23
    Вопрос задал: StreetBit (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 5)

    Отвечает: Шичко Игорь
    Здравствуйте, StreetBit!
    примерно так. Код в приложении.
    Button2 - для остановки таймера.

    Приложение:

    Ответ отправил: Шичко Игорь (статус: Практикант)
    Ответ отправлен: 27.11.2008, 14:46

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 236878 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5


    Вопрос № 152.072
    Помогите плиз разобраться с циклом.

    procedure TForm1.Button1Click(Sender: TObject);
    var
    FUin, FPas, str:string;
    k:LongInt;
    begin
    for k:=0 to listbox1.Count -1 do
    begin
    str:=listbox1.items[k];
    FUin := Copy(str, 0, Pos(';', str) - 1);
    Delete(str, 1, Pos(';', str));
    FPas := str;

    ICQClient1.ConvertToPlaintext := True;
    ICQClient1.UIN := StrToInt(FUin);
    ICQClient1.Password := FPas;
    try
    ICQClient1.Login();
    label5.Caption:='Wait...';
    except
    label5.Caption:='No Connect';
    end;

    end;
    end;


    смысл таков, я загружаю в лист бокс данные для входа в icq в формате номер;пароль, и должно происходить последовательное подключение к номерам из лист бокса, но этого не происходит, он просто коннектится к самому последнему номеру в списке.
    Отправлен: 27.11.2008, 20:18
    Вопрос задал: Akahaos (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 6)

    Отвечает: Del
    Здравствуйте, Akahaos!

    А тут так будет. У тебя нет условия прерывания цикла. Смотри: ты подключаешься к первому уину. На следующем проходе - ко второму. Соединение с первым, ессесно, разрывается. И так до самого конца. А каких результатов ожидал ты, если не секрет?
    ---------
    Только массовые расстрелы спасут Родину!
    Ответ отправил: Del (статус: 2-й класс)
    Ответ отправлен: 27.11.2008, 20:26

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 236910 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 152.084
    Здравствуйте!!!
    Помогите, пожалуйста!!!!
    Задание было такое: Если в результате замены отрицательных элементов массива их квадратами элементы массива по строкам образуют убывающую последовательность, то найти сумму элементов каждой строки, иначе определить – произведение

    Вылетает ошибка:project raised exception class econverterror?

    Приложение:

    Отправлен: 27.11.2008, 21:33
    Вопрос задал: Kirill_kill (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Del
    Здравствуйте, Kirill_kill!

    Где-то в гриде присутствуют не только цифры, но еще и буквы (пробел - тоже считается, если что). Кроме того, могу допустить косяк с десятичным разделителем. В целом - делай так: везде, где StrToFloat используешь, предварительно пиши (введи переменную S: string):

    S := Trim(StringGrid1.Cells[i,j]); //Убрали лишние пробелы
    S := AnsiReplaceStr(S, '.', DecimalSeparator); // заменили точку на тот разделитель, который стоит в системе
    S := AnsiReplaceStr(S, ',', DecimalSeparator); // заменили запятую на тот разделитель, который стоит в системе

    Кстати, не забудь подключить StrUtils. Поехали дальше. Пишем вместо StrToFloat(StringGrid1.Cells[i,j]) вот такое (допиши переменную F: Double):

    F := StrToFloatDef(S, -31337); // если не получилось перевести строку в число, то результатом будет число, указанное вторым параметром функции StrToFloatDef
    if F = -31337 then ShowMessage(S+' не является числом')

    Ну, будем надеяться, дальше и сам справишься, иначе нафига ты в учебное заведение пошел? :)

    P.S. Все вышесказанное относится и к StrToInt (соответственно, используем StrToIntDef)
    ---------
    Только массовые расстрелы спасут Родину!
    Ответ отправил: Del (статус: 2-й класс)
    Ответ отправлен: 27.11.2008, 21:45

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 236919 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5
    Комментарий оценки:
    Спасиб!!!
    Щас буду пробовать


    Вопрос № 152.123
    Здравствуйте! Объясните пожалуйста зачем для метода InstanceSize нужно использовать функцию IntToStr ?
    Отправлен: 28.11.2008, 02:18
    Вопрос задал: compile (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Delph
    Здравствуйте, compile!

    Метод IntToStr отображает в строковом виде целое число, полученное им в качестве параметра. Внутри программы при проверках и расчётах числа удобнее использовать в их родном формате (Integer, Double и т.д. - в зависимости от конкретной задачи). Но для того, чтобы это число смог прочитать пользователь программы, его приходится преобразовывать к строковому написанию. Предполагаю, что в примере, где Вы это увидели, происходит присваивание значения (изначально целочисленного) метке (что-то вроде Label1.Caption := IntToStr(объект.InstanceSize)) или полю редактирования (Edit1.Text := IntToStr(объект.InstanceSize)). Если я ошибся, поправьте меня и привидите сам пример, тогда появится возможность прокомментировать его более подробно.
    ---------
    Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
    Ответ отправил: Delph (статус: Практикант)
    Ответ отправлен: 28.11.2008, 12:22

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 236970 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5
    Комментарий оценки:
    Пасиб большое


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2008, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.13 от 01.12.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное