|
0 / 0 / 0
Регистрация: 26.05.2011
Сообщений: 34
|
|
Пароль на вход26.05.2011, 21:23. Показов 5171. Ответов 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 | |
|
Помогаю со студенческими работами здесь
40
Пароль на программу (пароль из файла)
Если есть пароль от почты и пароль от панели управления хоста, можно восстановить вход в админку? пароль на вход
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|