Вопрос № 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 - Определить количество памяти, отведенное объекту.
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;
смысл таков, я загружаю в лист бокс данные для входа в 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?
Где-то в гриде присутствуют не только цифры, но еще и буквы (пробел - тоже считается, если что). Кроме того, могу допустить косяк с десятичным разделителем. В целом - делай так: везде, где 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 услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.