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

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


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

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

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

Шичко Игорь
Статус: Студент
Рейтинг: 265
∙ повысить рейтинг >>
Николай Владимирович / Н.В.
Статус: Академик
Рейтинг: 68
∙ повысить рейтинг >>
Genia007
Статус: 10-й класс
Рейтинг: 61
∙ повысить рейтинг >>

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

Выпуск № 1227
от 12.11.2008, 01:35

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

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

Вопрос № 149644: Добрый день Вам уважаемые эксперты. Только начал изучать Delphi. Покажите пожалуйста стандартную пошагововую процедуру создания класса, методов, полей и т.д. с среде Delphi 7, желательно с комментариями. Спасибо. ...


Вопрос № 149681: здраствуйте!!! помогите написать программы пожалуйста!1. нужно разработать приложение для ввода результатов сессии. Организуйть табличный ввод, используя компонент TSringGrid. Предусмотрить запись результатов в текстовый файл на диск. 2.П...
Вопрос № 149686: Здравствуйте! Подскажите пожалуйстак как в Delphi объявить класс, простой класс с несколькими полями и методами. Спасибо!...

Вопрос № 149.644
Добрый день Вам уважаемые эксперты. Только начал изучать Delphi. Покажите пожалуйста стандартную пошагововую процедуру создания класса, методов, полей и т.д. с среде Delphi 7, желательно с комментариями. Спасибо.


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

Отвечает: sir Henry
Здравствуйте, Compile!
Класс - это условно говоря шкаф, в котором хранятся определённые сведенния (данные) и методы обработки этих самых данных. Данные обычно скрыты от непосредственного использования и к ним можно обращаться только через методы обработки или свойства класса.
Класс бывает сам по себе. Тогда его объявляют таким образом:
Код:
TMyClass = class

но такое случается редко, потому что в таком голом классе только самый минимум методов по работе с данными. Чаще бывает, что класс делают на основе другого класса, т.е. класса-предка, у которого есть уже необходимый набор методов, но чего-то специфического ему не хватает и на основе класса-предка делают класс-потомок:
Код:
TMyClass = class(TStringList)

Здесь класс MyClass это наследник стандартного класса TStringList.
Чего может не хватать у стандартного класса TStringList? Ну, например, перекодировки хранимых строк из кодировки Windows в кодировку DOS. Нужно добавить соответствующий метод. В этом случае создание класса будет выглядеть так:
Код:
Uses Windows, Classes;

Type
TMyClass = class(TStringList)
public //public - это значит что всё, что следует за этим словом могут использовать как сам класс, так и его последователи
procedure ToDOS;
end; //Объявление класса заканчивается словом end

//А здесь пойдёт реализация нового метода
procedure TMyClass.ToDOS;
Var
temp: PChar;
Begin
temp:=GetText; //Получаем текст в переменную типа PChar методом класса-предка
CharToOem(temp, temp); //Преобразовываем текст в переменной в DOS кодировку
SetText(temp); //Запихиваем текст обратно в класс методом класса-предка
End;
End;

Пример использования см. в Приложении Пример №1.
А что делать, если нам нужно хранить текст одновременно и в той и в этой кодировке? Ничего не попишешь, придётся содавать класс без предка.
Смотрим в Приложении Пример №2.
Что у нас изменилось?
В секции private появились две системы для хранения данных - для текста Windows и для текста DOS. Поскольку это классы, то нужно предусмотреть их создание. Для этого в своём классе мы вводим новый метод-конструктор класса Create. Он расположен в секции public, потому что созданием экземпляра класса занимается прикладная программа, а не абы кто.
В секции private появились две новые функции:
function IfTextWindowsNotEmpty: boolean;
function IfTextDosNotEmpty: boolean;
Они занимаются проверкой, не пуста ли текстовая строка перед преобразованием её в другую кодировку, чтобы не делать лишнюю работу и предупредить пользователя, что он забыл текст загрузить. Эти функции спрятаны от глаз основного приложения (в секцию private), потому что нигде, кроме как внутри нашего класса они применятся не должны. Да и не за чем это делать.
В секцию public добавлен метод переделки текста из кодировки DOS в кодировку Windows. Так, на всякий случай, для комплиментарности перекодировки.
В секцию public добавлен новый метод-деструктор Des troy. Его задача удалить из памяти все динамические структуры данных (а у нас это два StringList'а) в случае удаления из памяти самого нашего класса.
Как этот новый класс можно применять? У класса TStringList есть хороший и нужный метод - загрузка текста из файла:
TStringList.LoadFromFile('Имя_файла.txt');
и выгрузки текста в файл:
TStringList.SaveToFile('Имя_файла.txt');
Так что класс этот можно применять для перекодировки текстовых файлов.

Приложение:

Ответ отправил: sir Henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 09.11.2008, 10:22

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

    Оценка за ответ: 5
    Комментарий оценки:
    Вот такого ответа я ждал, спасибо Вам большущее за предоствленную помощь.


    Вопрос № 149.681
    здраствуйте!!! помогите написать программы пожалуйста!1. нужно разработать приложение для ввода результатов сессии. Организуйть табличный ввод, используя компонент TSringGrid. Предусмотрить запись результатов в текстовый файл на диск.


    2.По нажатию на кнопку один список (ListBox) заполняется последовательностью целых чисел от .. до .., диапазон задается в двух полях ввода. Выбор элемента в этом списке копирует его в другой список (ListBox). Еще одна кнопка служит для очистки списков. Причем выбор очищаемого списка осуществляется с помощью переключателей (RadioButton).
    Отправлен: 06.11.2008, 18:50
    Вопрос задала: К. Екатерина А. (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Шичко Игорь
    Здравствуйте, К. Екатерина А.!
    Разместите на форме следующие элементы:
    StringGrid1: TStringGrid;
    Add: TButton; {добавление строки в таблицу}
    Add_To_File: TButton; {вывод таблицы в файл}
    Edit1: TEdit;
    Edit2: TEdit;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Add_List_1: TButton; {заполнение листа 1}
    RadioGroup1: TRadioGroup;
    Clear_Spis: TButton; {очистка списков}
    Перенос из листа 1 в лист 2 по двойному нажатию на строку Листа 1.
    В Инспекторе объектов для StringGrid1 раздел Options свойство goEditing установите в TRUE.
    В Инспекторе объектов для ListBox1 обработка события OnDblClick процедура ListBox1DblClick
    Коды для обработки событий в приложении.

    Приложение:

    Ответ отправил: Шичко Игорь (статус: Студент)
    Ответ отправлен: 07.11.2008, 07:48

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


    Вопрос № 149.686
    Здравствуйте! Подскажите пожалуйстак как в Delphi объявить класс, простой класс с несколькими полями и методами. Спасибо!
    Отправлен: 06.11.2008, 19:05
    Вопрос задал: Compile (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Кэр Лаэда
    Здравствуйте, Compile!


    вот пример простого класса

    если есть вопросы задавайте в минифорум

    Код:


    unit Unit2;

    interface
    uses Dialogs;
    type

    TMyClass = class

    private
    FpublicProp1: string;

    procedure privateA1;

    //сетер для свойства
    procedure SetpublicProp1(const Value: string);




    public

    procedure publicA1;
    function publicB1:string;


    property publicProp1:string read FpublicProp1 write SetpublicProp1;



    end;

    implementation

    { TMyClass }

    procedure TMyClass.privateA1;
    begin
    showmessage('TMyClass.privateA1');
    end;

    procedure TMyClass.publicA1;
    begin
    showmessage('TMyClass.publicA1 9;);
    end;

    function TMyClass.publicB1: string;
    begin
    ShowMessage('TMyClass.publicB1');
    Result:='TMyClass.publicB1';
    end;

    procedure TMyClass.SetpublicProp1(const Value: string);
    begin
    FpublicProp1 := Value;
    end;

    end.



    ---------
    Я знаю что ничего не знаю, но я знаю больше, чем тот кто думает что знает все
    Ответ отправил: Кэр Лаэда (статус: Практикант)
    Ответ отправлен: 06.11.2008, 19:15

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

    Оценка за ответ: 4
    Комментарий оценки:
    Спасибо, больше бы комментариев!


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

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

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

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

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

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала 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.11 от 9.11.2008

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

    В избранное