Вопрос № 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 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 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 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 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 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 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 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 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 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 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 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 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 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 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 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: Пасиб большое
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.