Вопрос № 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. после раздела реализации вставлете код:
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 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