Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (до версии 2009) - часть 5

Автор: volser
Дата сообщения: 10.07.2009 11:05
JohnSilver182
Нет, не сложно. Пример
Автор: delover
Дата сообщения: 10.07.2009 18:19
JohnSilver182
Полностью согласен с ShIvADeSt, но доводов предложить не могу. Просто могу намекнуть - куча народа которые программируют DB пишут не Form1.MyField.Value, а пишут Form1.Query.FieldByName('MyField').Value. Это лишь вопрос привычки и синтаксиса.
Автор: volser
Дата сообщения: 10.07.2009 18:26
delover
Вопрос не в обращении к полю, а в том что он хочет обращаться к форме по имени.
Автор: ekemov
Дата сообщения: 10.07.2009 19:42
я например так UniQuery.Fields[0].AsString через пор. номер.

Автор: delover
Дата сообщения: 11.07.2009 09:47
volser
Если вопрос разворачивать детально - то проблема только в том, что:
1. нужно обращаться к свойствам/методам не имеющимся в классе TForm.
2. такие свойства/поля/методы делятся на две категории
а) общие для всех форм в моём проекте
б) уникальные для каждого окна.
3. если мы захотим обращаться к уникальным свойствам не зная при этом ничего о типе этого уникального окна, то нам прямой путь к изучению серверов OLE автоматизации COM DCOM и всё такое прочее. То есть мы хотим код типа TAutomatizedForm(F).Button123.click, а не TForm123(F).Button123.click.
4. Преобразование к конкретному классу TForm123 конечно не так романтично, но с некоторого времени я иногда подумываю, что гемор тоже не очень романтично. Как правило внешний доступ к конкретным свойствам нужен только для установления изначальных значений и прочтения при закрытии/сохранении. Всё это оформляется одним методом для модальных окон и двумя методами для немодальных. Не сказка конечно. Лучше иногда потратить недельку на изучение вопроса, что же есть такое пространство имён.

Всвязи с пространством имён вопросик. У меня компонент похожий в ИДЕ на датасет. Я его кидаю на фрейм. Добавляю в него филды. Кидаю фрейм на форму, добавляю филды на форме. Получается три пространства имен. Пространство формы, пространство фрейма и пространство датасета фрейма на форме. Что касается формы и фрейма - то тут VCL всё делает автоматически. Что касается датасета, то тут мне удалось урегулировать только исключительными ситуациями. Например я добавил филд на форме. Потом сохранил и закрыл, а потом кто-то добавил этот же филд во фрейм. В принципе есть два решения:
1. Разрешать такое, так как Form1.Frame1.Field1 компилятор отличит от Form1.Field1,
2. Но есть второе решение, когда открывают на редактирование Form1 можно страшно ругнуться и переименовать Form1.Field1, чтобы сохранились данные.

Я реализовал второй вариант, так как боюсь запутаться в одноимённых филдах. Какой вариант предпочтительнее? И если переименовывать, то по какому правилу?
Автор: Ape
Дата сообщения: 11.07.2009 09:59
Как работать с карт-ридером для магнитных карт?
Со сканером штрихкодов работать просто. Он эмулирует клавиатуру и при сканировании посылает последовательность символов в активное приложение. А карт-ридер в режиме эмуляции клавиатуры (PS/2) ничего никуда не передаёт. Если у кого есть опыт в этом деле, поделитесь пожалуйста!
Автор: Coltrain
Дата сообщения: 11.07.2009 15:11
Ape

Цитата:
Как работать с карт-ридером для магнитных карт?

Про аналогию со сканером штрих-кодов - все правильно. А то, что
Цитата:
карт-ридер в режиме эмуляции клавиатуры (PS/2) ничего никуда не передаёт
то это проблема в карт-ридере. Проверь его работу в обыкновенном блокноте.
Автор: JohnSilver182
Дата сообщения: 11.07.2009 19:33
А кто знает как PROXY SERVER, USER NAME и PASSWORD Установить на соединение ??

hSession := InternetOpen('IE10', INTERNET_OPEN_TYPE_PRECONFIG ,nil, nil, 0);
Автор: Ape
Дата сообщения: 12.07.2009 07:45
Coltrain

Цитата:
Про аналогию со сканером штрих-кодов - все правильно. А то, что
Цитата:
карт-ридер в режиме эмуляции клавиатуры (PS/2) ничего никуда не передаёт
то это проблема в карт-ридере. Проверь его работу в обыкновенном блокноте.

Спасибо! Я предполагал, что в карт-ридере проблема, но не был уверен. Проверил в блокноте. Ничего! Интересно то, что в режиме RS232 он передаёт данные, проверил драйвером АТОЛ. Но в режиме PS/2 и в атоловский драйвер ничего не передаёт.
Автор: Mazyan
Дата сообщения: 12.07.2009 19:02
Прошу, помогите новичку!
Имеется База данных, в ней 3 связанные таблицы : table1,2,3
надо сделать так чтобы в таблице3 подсчитывалась сумма всех записей поля "общий вес" и это значение присвоить полю "вес каркаса" таблицы2, так же сумму всех записей поля "вес каркасса" таблицы2 присвоить полю "расход металла" таблицы1.

Заранее спасибо!
Автор: volser
Дата сообщения: 12.07.2009 19:13
Mazyan
Какая БД?
Автор: ShIvADeSt
Дата сообщения: 13.07.2009 01:00
Mazyan

Цитата:
Имеется База данных, в ней 3 связанные таблицы : table1,2,3
надо сделать так чтобы в таблице3 подсчитывалась сумма всех записей поля "общий вес" и это значение присвоить полю "вес каркаса" таблицы2, так же сумму всех записей поля "вес каркасса" таблицы2 присвоить полю "расход металла" таблицы1.

А ничего, что ты даже структуру таблиц не дал, плюс к этому не понятно как таблицы связаны. И еще - примерчик бы данных и что хочешь получить, а то телепатов ищи в передаче про экстрасексов.
Автор: Mazyan
Дата сообщения: 13.07.2009 08:08

Цитата:
Какая БД?

paradox, если я вас правильно понял.

связь таблиц
table1(марка изделия, бетон марки, объем, расход металла) ->
table2(марка изделия, марка каркаса, количество, вес каркасса) ->
table3(марка каркасса, кол.стержней, диаметр, класс стали, длина, вес 1 пог.м./кг, вес 1 стержня, общий вес)

Жирным отмечены поля по которым связаны таблицы, курсивом поля те самые поля которых нужно посчитать сумму всех записей и присвоить полю вышестоящей таблицы.
Автор: avital
Дата сообщения: 13.07.2009 09:50
Всем привет. Мне нужно сделать оснастку (snap-in) для mmc (microsoft mangement consol) в delphi. Кто-нить может подсказать с чего начать?
Автор: JohnSilver182
Дата сообщения: 13.07.2009 14:25
Hi All
Создать компонент в RUN-TIME это как 2 пальца , но вот как создать события этого компонента ???
Автор: delover
Дата сообщения: 13.07.2009 15:11
JohnSilver182
1. Клади кнопку на форму и кликай по Button1 двойным клацем. Получил:
>procedure TForm1.Button1Click(Sender: TObject);
>begin
> // <-- Сюда вставим коммент чтоб не удаляла автоматически.
>end;
2. После создания ран-тайм компонента FLabel1 присваиваем:
> FLabel1.OnExit := Self.Button1Click;
3. Удаляем кнопку.
4. Переименовываем Button1Click в Label1Exit;
5. Пишем внутри события, что нам надо.
Автор: JohnSilver182
Дата сообщения: 13.07.2009 15:35
delover
ОЙ что то сложно . Я хотел сказать события для не визуальных компонентов.
Автор: NOwlar
Дата сообщения: 13.07.2009 16:38
JohnSilver182
Только ручками. Пишется метод обработки события, например:

Код: procedure TForm1.MyEventHandler (Sender: TObject);
begin
MessageDlg( 'MyEventHandler', mtInformation, [mbOK], 0 );
end;
Автор: Frodo_Torbins
Дата сообщения: 13.07.2009 19:10
JohnSilver182
Переходите на вкладку Events дважды клацаете по нужному событию. Оно?
Автор: JohnSilver182
Дата сообщения: 13.07.2009 19:25

Цитата:
Переходите на вкладку Events дважды клацаете по нужному событию. Оно?


В смысле смотрим например

procedure TForm1.pFIBDatabase1AfterConnect(Sender: TObject);
begin

end;

Делаю

.........
Var pFib:TpFIBDatabase
................
pFib:=TpFIBDatabase.create(nil);
.............................

procedure pFibAfterConnect(Sender: TObject);
begin

end;


ИЛИ это в классах бесполезно делать ???????


Автор: Frodo_Torbins
Дата сообщения: 13.07.2009 22:33
JohnSilver182
NOwlar вам уже все описал. Добавлю только, что pFibAfterConnect обязательно должен быть методом класса. Например методом самой формы: procedure TForm1.MyEventHandler(Sender: TObject).
Автор: DmitryKz
Дата сообщения: 14.07.2009 00:23
Ребята, посоветуйте способ решения такой задачи: есть древне-греческий текст в бета-коде: вот что он из себя представляет:

А вот тот самый текст, который он содержит:

Как видно, бета-код использует значки для отображения
диакритики, потом звездочку для показа, что следущий символ заглавный, еще некоторые служебный символы, ну, например, {1 - знак, что начинается текст заголовка, код #40 - абзац, #80 - новая строка. В-общем, расшифровку бета-кодов я в инете нашел. Мне нужно написать программу для отображения этого текста в Юникоде. Проблема только в решении: что здесь грамотно использовать? Я склоняюсь к написанию нечто вроде анализатора, но ничего не знаю о них - даже не представляю с чего начать. Есть еще вариант с использованием регулярных выражений, но что-то мне подсказывает, что это не самый оптимальный вариант будет.
Кто что может сказать по этому поводу?
PS: второй скриншот из программы, которая работает с этим бета-кодом, но исходником у меня, да и нигде в Инете, нет.
Автор: NOwlar
Дата сообщения: 14.07.2009 00:31
JohnSilver182
Если совсем не понятно, то в вашем случае должно быть:

Код: procedure TForm1.pFibAfterConnect(Sender: TObject);
begin
// тра-ля-ля, мы подключились, возьмёмся за обработку
// здесь какой-нибудь код
end;
Автор: Aleksandr N
Дата сообщения: 14.07.2009 01:48
Подскажите как можно сделать в FastReport такое:
Есть база данных из которой берутся данные. Лист разбит на два столбца. Данные печатаются подобным образом:

ААА БББ
ВВВ ГГГ
ДДД ЕЕЕ

При печати на обратной стороне данные печатаются так-же, но получается, что на данных ААА с обратной стороны печатается БББ, а нужно чтобы было ААА. Тоесть нужно перевернуть данные на обратной стороне.

Может скрипт какой-то нужен? Не подскажете?
Автор: ShIvADeSt
Дата сообщения: 14.07.2009 02:14
DmitryKz

Цитата:
Кто что может сказать по этому поводу?

Насколько большой словарь слов в бета-коде? Можно ли сделать однозначный файл (таблицу) соответствий кода и символа? Если да - то считываем файл с бета кодом, потом пробегаемся по все элементам таблицы и делаем ReplaceStr бета кода на юникод. Далее отображаем. Сначала лучше всего разобраться с обычными буквами, а потом уже добивать более редкие варианты, при этом сложным вариантам давать приоритет выше и обрабатывать вначале. Например
есть у нас lymbda и *)lymbda - при этом вторая заглавная. Тогда при анализе текста вначале заменяем все заглавные (ставим их вначало таблицы), и только потом обычные буквы. Если не понятно - пиши.
Автор: DmitryKz
Дата сообщения: 14.07.2009 12:58
ShIvADeSt
Представление о словаре дает питоновский код, предоставленный NOwlar (конечно, там все построено не по частоте "буковок", а по алфавиту, но греческому), т. е. около 280 соответствий.
Спасибо, попробую этот способ, хотя он, наверно, действительно будет небыстрым.
Автор: NOwlar
Дата сообщения: 14.07.2009 13:02
ShIvADeSt
ReplaceStr с разобором сначала простых вариантов может не покатить, например, заглавные буковки с крышечками и апоспрофами. Там признак заглавного * идёт всегда до буквы, а признак апострофов и крышечек разных - может быть как до, так и после (допустимо и то и другое).
Табличку и правила перевода можно поглядеть по ссылкам в моём посте выше.
Автор: DmitryKz
Дата сообщения: 14.07.2009 13:24
NOwlar
Да, спасибо, правила-то перевода я уже давненько нашел (именно с текстами TLG я и работаю и мой пример оттуда), а вот практически готовой таблички, увы, не попадалось
Автор: StalkerSoftware
Дата сообщения: 14.07.2009 14:17
Hi всезнающий All,

Есть стандартные TEdit или TMemo. У них есть стандартное (системное) контекстное меню для работы с текстом (вставить, скопировать, выделить, удалить и т.д.).
Вопрос: Как можно в это системное меню добавить свой пункт меню ?
Автор: Frodo_Torbins
Дата сообщения: 14.07.2009 14:46
StalkerSoftware
Попробуйте через апи: GetMenu.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Clipper 5


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.