|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
Пароль на вход26.05.2011, 21:23. Показов 5250. Ответов 50
Метки нет (Все метки)
Ребята, подскажите, я у вас на форуме видела процедурку для создания пароля на вход в программу через INI-файл, но видим тот, кто её написал, там очень хорошо напутал, и она не работает. Как всё-таки можно организовать пароль? Конечно,хранение в этом файле небезопасно, но всё-таки. Если кто знает, подскажите,очень нужно)))
0
|
|
| 26.05.2011, 21:23 | |
|
Ответы с готовыми решениями:
50
Пароль на вход своей программы в Delphi не через INI-файл каким образом можно поставить пароль на вход в программу
|
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 27.05.2011, 08:51 [ТС] | |
|
Не знаю, у меня так, как я сказала. Вот процедурка на кнопке:
procedure TForm2.N1Click(Sender: TObject); begin Application.CreateForm(TForm1, Form1); end; Получается же, что он снова её создаст. А OnShow не прокатывает
0
|
|
|
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
|
||
| 27.05.2011, 09:49 | ||
получается так. А зачем ты так написала? Ты лучше изложи какой результат ты хочешь в итоге, тогда больше шансов получить дельный совет
0
|
||
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 27.05.2011, 11:37 [ТС] | |
|
Если не писать Create, то не работает, я с этого и начинала делать. Если вкратце, то хотелось бы, чтобы если форма(находящаяся внутри главной формы-контейнера) уже открыта, но находится в свернутом виде, то чтобы при попытке снова нажать на кнопку меню,где она по идее должна открываться,была проверка того, а может такая форма уже существует, и не надо её второй раз создавать. Надеюсь, вы поймёте, что я имела в виду)))
0
|
|
|
|
|
| 27.05.2011, 11:42 | |
|
Ну флаг какой-нибудь организовать, при создании окна - активируется флаг, и если флаг активен, нельзя создать никакой формы больше, если неактивен - то создавать можно
Единственно что в голову пришло
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 27.05.2011, 11:46 [ТС] | |
|
А как это можно сделать? Под флагом вы имеете в виду CheckBox? Или что-то другое?
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 27.05.2011, 11:50 | |
|
Если Вы выбрали MDI, то Вам необходимо понять как работает этот тип интерфейса, т.к. он сильно отличается от Normal главным образом тем, что все сообщения "дочкам" передаются не напрямую, а через т.н. "клиентскую область главного окна". Поэтому "дочку" нельзя открыть модально или например поверх всех онон (StayOnTop) (в принципе и то, и другое можно эмулировать кодом, но это весьма непросто, поверьте)
Создание формы (в т.ч. дочерней) может выполняться : 1) Статически. При запуске приложения (если форма в списке автосоздаваемых - см.Delphi->Project->Options->закладка Forms(левый список) форма создается один раз и уничтожается по завершению приложения перед уничтожением гл.формы. Закрытие формы не приводит к ее уничтожению и для того, чтобы снова открыть ее, достаточно просто дать Show - при этом все поля формы сохраняют значения, присвоенные им в предыдущем показе (например эдиты, чекбоксы и т.д.). Плюс таких форм в том, что они быстро открываются повторно (даже если содержат "медленнные" данные, например объемные сетки со справочниками, полученными от сервера) и опять же сохраняют информацию, введенную в прошлый раз. Минус - занимаемая память, ведь форма может вообще не понадобиться, однако она создается и возможно даже что-то выполняет при создании (например запускает запрос на выборку и ожидает передачи сервером результсета), т.е. ненужные тормоза. Это четко видно на примере программ, что-то интенсивно грузящих при вызове (типа 1С), что особенно неприятно если Вы случайно или по неведению нажали на иконку, а теперь вынуждены ждать завершения всех этих загрузок чтлюы сразу сказать ей "до свидания" Также "фоновые" формы с открытыми наборами данных могут давать лишнюю нагрузку скл-серверу, поддерживающему соотв.открытое соединение (а в случае серверного курсора - конкретно подзагрузить сервер лишней работой)2) Динамически В дизайне форма переносится из левого списка в правый, тем самым исключая ее из автоматически создаваемых при запуске программы. Чтобы форма появилась на экране, нужно ее сначала создать. Например по кнопке "Добавить запись" гл.форма создает и вызывает форму для ввода новой записи: procedure TForm1.Button1Click(Sender: TObject); begin with TFormAddRecord.Cteate(Self) do begin ShowModal; Free; // Если форма не самоубивающаяся (Action<>caFree в OnClose) end; end; Плюс - форма не "тянет" лишнего, отчего экзешник проекта "легче" и грузится быстрее. В приложении с десятками, а то и сотнями)форм эффект динамических форм очень заметен в лучшую сторону. Минусы - проблемы с сохранением "прошлых" данных, поэтому если данные надо сохранять, форму стОит сделать авто и постоянно живущей, либо сохранять данные где-то в другом месте. Также к минусам можно относить некоторые "тормоза", связанные с созданием и инициализации формы (как в случае с тем же открытием справочника)
0
|
|
|
|
|
| 27.05.2011, 11:55 | |
|
булеву переменную например использовать, да хоть что-то другое, скажем при создании формы, делаем переменную в True, далее где-то теперь если True тогда нельзя создать больше, если False то разрешено создать
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 27.05.2011, 11:57 [ТС] | |
|
Это всё очень полезно, спасибо,но все равно немножко не то, чего я хотела. В принципе с MDI я разобралась, формы все какие нужно из одного списка в другой перенесла, все работает прекрасно кроме этой маленькой неприятности с дубликатом. Так все-таки можно эту проверку организовать каким-нибудь образом?
Добавлено через 1 минуту Сейчас попробую с переменной)))
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 27.05.2011, 12:00 | |
|
Никаких флагов не нужно. Форма-мама (MDIForm) всегда может просмотреть все "живые" (в смысле созданные) дочки через св-ва MDIChildCount и MDIChildren[] и, если нужная по контексту уже имеется, то активировать ее с помощью ActiveMDIChild.
Например implementation uses UnitAddRecord.. ... var frmAddRec: TFormAddRecord; frmAddRec := nil; for i = 0 to MDIChildCount-1 do if MDIChildren[i] is TFormAddRecord then begin frmAddRec := TFormAddRecord(MDIChildren[i]); break; end; if not assigned(frmAddRec) then frmAddRec := TFormAddRecord.Create(Self); ActiveMDIChild := frmAddRec;
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 27.05.2011, 12:06 [ТС] | |
|
Спасибо большое))) Но не пригодилось, до меня дошло. Я просто при открытии этой формы поставила Form2.N1.Enabled:=false, а при закрытии true, и работает)))
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 27.05.2011, 12:07 | |
|
Вообще MDI обладает одним замечательным свойством - она непросредственно управляет всеми "дочками", причем первой получает сигналы о событиях в дочках, раньше их самих ! Это позволяет вынести за "скобки" весь функционал дочек, сконцетнровав его непосредственно вглавной форме.
При этом, получая сообщения (например, нажата кнопка), мама может даже не заморачиваться КАКОЙ именно дочке оно адресовано, просто передвая его активной !. Вот пример. Есть 5 дочек с разными гридами. Пользователь жмет кнопку на гл.форме "Сортировать". Мама просто посылает соотв.сообщение (как работать с сообщениями в делфи см.отдельно) активной дочке, которая уже и выполняет упорядочение датасета по текущему столбцу. Либо сама мама и выполняет сортировку датасета, получая указатель на него из активного грида активной дочки ! МДИ-интерфейс очень мобилен, красиво программируем и хорошо оптимизируется. Однако имеет и недостатки (к сожалению)
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 27.05.2011, 12:11 [ТС] | |
|
Да,недостатки конечно есть, но мне такой интерфейс приглянулся, решила делать в нем))
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 27.05.2011, 12:19 | |
|
Тогда все управление дочкамим - на мамку !
В дочках только popupmenu, ну и обязательно все управление через TActionList(Actions) + TImageList Добавлено через 40 секунд Наглядный пример - Image Editor делфишный
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 27.05.2011, 12:20 [ТС] | |
|
Еще вопрос))В отчёте в одном из столбцов формирую строчку из нескольких столбцов таблицы. Конкретнее: есть таблица Преподаватели, и у каждого из них предметы, которые он может вести,например, высшая математика, дискретная математика, физика и др. Вот значит, в отчете мне нужно в одном поле через запятую вывести эти поля, при этом беру только три первых(по степени важности), но,если этот преподаватель ведет только 2 предмета, то третьим он ставит опять же первый. Подскажите, как сделать проверку, чтобы одинаковые названия он не брал
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 27.05.2011, 12:57 | |
|
При формировании перечня "в строчку" пользуйтесь списком и поиском:
var i: integer; ls: TStrings; s: string; ls := TStringList.Create; for i := LOW(arPreds) to HIGH(arPreds) do // допустим перечень предметов в массиве строк if ls.IndexOf(arPreds[i])<0 then ls.Add(arPreds[i]); for i := 0 to ls.Count-1 do s := s+ls[i]+', '; ls.Free; Delete(s,Length(s)-1,2); Edit1.Text := s; Добавлено через 2 минуты хм.. вообще-то можно и без списков: for i := LOW(arPreds) to HIGH(arPreds) do // допустим перечень предметов в массиве строк if Pos(arPreds[i],s)<0 then s := s+arPreds[i]+', '); if Length(s)>1 then Delete(s,Length(s)-1,2); Edit1.Text := s;
1
|
|
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 27.05.2011, 13:25 [ТС] | |
|
Спасибо,попробую)))надеюсь, что получится)))
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 27.05.2011, 14:55 | |
|
У такой, как на аватарке, не может не получиться !
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 27.05.2011, 21:34 [ТС] | |
|
Спасибо))) Буду стараться)))
0
|
|
|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
| 29.05.2011, 14:38 [ТС] | |
|
А можно ли как-нибудь из ini-файла все записанные данные в виде таблицы отобразить в приложении,допустим, в DBGride?
0
|
|
|
|
|
| 29.05.2011, 14:42 | |
|
а зачем в дб гриде? ну в стринггрид вывести можно
0
|
|
| 29.05.2011, 14:42 | |
|
Пароль на программу (пароль из файла)
Если есть пароль от почты и пароль от панели управления хоста, можно восстановить вход в админку? пароль на вход
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|