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

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


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

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

Выпуск № 870
от 17.07.2007, 03:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 465, Экспертов: 84
В номере:Вопросов: 2, Ответов: 4


Вопрос № 94750: Приветствую вас дорогие программисты!У меня такой вопрос: как можно организовать поиск слов в столбцах, с помощью компонента FindDialog1 в компоненте DBGrid1? Help! ..
Вопрос № 94808: У Delphi (использую 6.0) я редкий гость, и прошу помочь с проблемкой: Объявляю как положено type myClass = class и т.д. В проекте нужно иметь одну глобальную переменную этого типа. Без проблем объявляю ее: myVar: myClass; Вопросы: ...

Вопрос № 94.750
Приветствую вас дорогие программисты!У меня такой вопрос: как можно организовать поиск слов в столбцах, с помощью компонента FindDialog1 в компоненте DBGrid1? Help!
Отправлен: 11.07.2007, 12:28
Вопрос задал: Pfvel kl (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, Pfvel kl!
У FindDialog только две необходимые для поиска вещи:
FindDialog.FindText - сюда заносится тот текст, который Вы собираетесь искать где-нибудь;
FindDialog.OnFind - в это событие заносится то действие, которое должно произойти, когда Вы нажимаете кнопку "Найти".
Остальное необязательно, можете об остальных свойствах прочитать в хелпе.
Итак, поиск в таблице БД (не в DBGrid!!!! Боже упаси Вас там искать!!! :) ):

{Пишем в процедуре OnClick кнопки, которая вызывает диалог поиска}
FindDialog1.Execute; {Открытие диалога поиска. Туда заносим строку, которую собрались искать}

{Пишем в процедуре события OnFind Вашего диалога}
If Table1.Locate('Название_поля_таблицы', Variant(FindDialog1.FindText), [loCaseInsensitive]) Then
DBGrid1.SetFocus {Если что-то найдено, то переносим фокус в DBGrid. Там курсор встанет на найденой строке}
Else
ShowMessage('Такого здесь отродясь не существовало!'); {Ничего не нашли, можно еще раз поискать. Диалог сам собой не закрывается}
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 11.07.2007, 13:10


Вопрос № 94.808
У Delphi (использую 6.0) я редкий гость, и прошу помочь с проблемкой:
Объявляю как положено type myClass = class и т.д.
В проекте нужно иметь одну глобальную переменную этого типа.
Без проблем объявляю ее: myVar: myClass;
Вопросы:
1) Есть ли возможность использовать эту глобальную переменную (экземпляр класса) без предварительного вызова его метода Create? По классической литературе я вижу что обязан вызвать Create, но я допускаю, что есть неизвестные для меня хитрости/тонкости и поэтому задаю этот вопрос.
2) Если уж прийдется вызывать Create, то я не хочу делать это из рабочих файлов проекта. Хочется придать этому классу некоторую "автономию". Т.е. желательно вызвать Create как то "автоматически", использую некий код, расположенный в том-же файле, где объявлен класс. Посоветуйте плз. как это лучше сделать.
Спасибо за внимание.
Отправлен: 11.07.2007, 18:27
Вопрос задал: PostM (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, PostM!

если класс содержит только методы (полей класса нет), то можно обойтись и без создания класса, надо только все методы пометить как "метод класса"
class procedure....
class function.....
Переменную при этом можно не создавать, а пользоваться типом:
begin
...
myClass.SomeClassMethod;
...
end;
Если все же класс нужно создавать, то
1. В интерфейсном разделе юнита объявляете глобальную переменную этого класса
2. после раздела реализации вставлете код:

Initialization
myVar := myClass.Create;
finalization
MyVar.Destroy;
end;
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 8-ой класс)
Ответ отправлен: 11.07.2007, 18:38
Оценка за ответ: 5
Комментарий оценки:
Ваш ответ - именно то что мне и нужно!
БОЛЬШОЕ Спасибо.

Отвечает: Виктор Пырлик
Здравствуйте, PostM!
Любой класс, созданный пользователем – является потомком TObject, где уже объявлен в том числе и конструктор (метод Create). Суть этого метода – инициализация нового объекта, т.е. выделение памяти. Вы можете использовать экземпляр класса и без его инициализации, но только в том случае, если под его переменные не требуется выделять память (отсутствуют переменные – поля классы). Но, не стоит брать это за практику. Дело в том, что, вам не надо самому переопределять конструктор. Достаточно после объявления переменной класса, вызвать его метод Create:
Var myVar:myClass;
myVar := myClass.Create;
работаем с myVar

переопределение конструктора как правило необходимо, если требуется инициализировать класс по особому – заполнить переменные значениями, выполнить иные действия.
В этом случае, необходимо создать в вашем классе метод Create:
T = class(T)
private

protected

public
constructor Create; override;
destructor Destroy; override;
published

end;

end;
(для удобства, становимся на нужный метод, жмем Shift + Ctrl + C и заполняем тело метода).

Если ваш класс находится в отдельном модуле (файле), то, можно объявить переменную этого класса, подключив модуль, в вашем «рабочем» классе, и вызвать в его конструкторе (OnCreate), конструктор созданного вами класса, и дальше просто пользоваться этой переменой.
---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: 7-ой класс)
Ответ отправлен: 11.07.2007, 19:23
Оценка за ответ: 5
Комментарий оценки:
немножко не по теме вопроса, но Спасибо за поддержку

Отвечает: Shveps
Здравствуйте, PostM!
Класс на пустом месте не вырастает, поэтому его все равно нужно создавать. А реализовать её автономность можно создав dll динамически подключаемую библиотеку. И все рычаги по реализации методов этого класса вывести в виде объявления методов, которые будут доступны для вызовов.
К сожалению сейчас у меня не установлен Delphi на компьютере, поэтому подробнее рассказать как создать dll и объявить там методы и их реализацию не могу.
---------
Пиво ф топку !!! Водку Тоже !!!
Ответ отправил: Shveps (статус: 6-ой класс)
Ответ отправлен: 11.07.2007, 19:43
Оценка за ответ: 4
Комментарий оценки:
Спасибо за информацию про возможность включения классов в DLL


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное