Консультация № 185116
08.01.2012, 12:08
174.47 руб.
0 63 1
Уважаемые эксперты! Я извиняюсь что уже не раз обращаюсь со своим вопросом , может это не в правилах форума. Но Пожалуйста, ответьте на вопрос:

Написать программу , делала с помощью макросов не выходит ни чего вот пост так и весит тут https://rfpro.ru/question/184900 ... Написать программу , изначально как оперативный журнал. 1.Нужна форма регистрации\авторизации 2. после того как пользователь авторизовался появляется его личный лист например стрингрид состоящий из трех частей это Дата ,Время дежурства, Событие. При входе на его лист появляется форма заполнения , последующее действие - вносятся данные через форму в ячейки , но существует еще и сводный журнал в котором отображаются поочередно внесенные данные всех пользователей. То есть сводный лист которой содержит четыре графы это Дата, Время дежурства, Событие, Фамилия пользователя .
формат данных
Дата : число.месяц.год (по возможности чтоб автоматически появлялась при открытии формы заполнения)
Время дежурства: с 8 до 20 или с 20 до 8 (чтоб была выборка этих двух значений , да же можно с использованием обычных флажков)
Событие : имеет формат обычного текста.

Если кто то заинтересовался укажите стоимость выполнения задания полностью......

Обсуждение

Неизвестный
10.01.2012, 17:42
общий
Адресаты:
А можно сделать чтоб столбец Событие расширялся по вертикали если вводишь больше данных чем предусмотрено границами , и еще чтоб дата текущая вводилась автоматически либо проверку на текущую дату , чтоб дежурный не ошибся при вводе даты.
Неизвестный
10.01.2012, 18:07
общий
Адресаты:
И если не сложно добавить функцию удаления пользователя для администратора.
давно
Профессионал
153662
1070
10.01.2012, 21:45
общий
Удаление пользователя сделал, остался вопрос из общей таблицы его удалять будем, я думаю не стоит. Дата вводится автоматически при первом нажатии цифровой клавиши в поле дата. А вот с увеличением высоты строк засада, стандартный компанент этого делать не умеет и я пока не могу это исправить, есть билиотека ehlib там сетка позволяет изменять высоту строк, вручную точно можно, а вот автоматом надо посмотреть.
Прикрепленные файлы:
7a6cab1c828145e325512dad52dd7f09.rar
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
11.01.2012, 00:02
общий
Адресаты:
Евгений вот попробовала зарегистрировать пользователя но ни чего не вышло .

давно
Профессионал
153662
1070
11.01.2012, 11:22
общий
11.01.2012, 15:55
Что Вы перед этим делали? Можно подробно все Ваши шаги? Ошибку не наблюдаю.
Хотя нет, вот нашёл, Вы пытались добавить пользователя после закрытия формы администратора, будем искать причину закрытия dataset.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
11.01.2012, 16:06
общий
Исправил эту ошибку.
Прикрепленные файлы:
7e7b8a69ef1f21c0a452b6a439ef238e.rar
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
11.01.2012, 16:18
общий
Адресаты:
А на счет расширения ячейки событие ни чего не придумали или придётся просто увеличить окно программы
давно
Профессионал
153662
1070
11.01.2012, 18:01
общий
11.01.2012, 18:03
Не выходит у меня "каменный цветок" с ячейками, всё не то, могу предложить такой вариант решения вопроса или просто растягивать форму, когда нужно. Те компоненты которые у меня есть отображают в несколько строк только на время редактирования поля.
Прикрепленные файлы:
37d952ffb044dff394e6414cffb06541.rar
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
11.01.2012, 23:13
общий
Адресаты:
Сколько я Вам должна заплатить за получения исходников.
давно
Профессионал
153662
1070
12.01.2012, 09:44
общий
Надо определиться с ячейками, оставляем как сейчас есть или убрать поле мемо? В форме администратора нет поле мемо, добавить его туда? В остальном Вас программа полностью устраивает? По исходникам, любая сумма в качестве благодарности на портальный кошелёк, после оформления ответа.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
12.01.2012, 13:33
общий
Адресаты:
Давайте уберем поле мемо, а так вариантов больше не по поводу ячейки
давно
Профессионал
153662
1070
12.01.2012, 19:42
общий
Поработал ещё над кодом, потестируйте. У меня вариантов по ячейкам больше нет, возможно кто нибудь из экспертов подскажет.
Прикрепленные файлы:
df92dc0b5d814ac84c015afd73488477.rar
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
12.01.2012, 19:47
общий
12.01.2012, 19:49
Цитата: 316280
А можно сделать чтоб столбец Событие расширялся по вертикали если вводишь больше данных чем предусмотрено границами
В смысле она хочет что бы когда строка доходила до границы столбца строка увеличивалась бы на одину высоту строки и вводимые данные переносились бы на новую строку. Кто нибудь знает как это решить? Компоненты типа ehlib, rxlib, JVCL не дают нужного результата (в лучшем случаи многострочность только на время редактирования поля), ковырялся с исходником стандартной сетки, не получается.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
12.01.2012, 22:34
общий
Адресаты:
Я просмотрела программу , то есть из изменений : теперь можно логин вводить не обязательно на английском ??
Неизвестный
12.01.2012, 22:35
общий
Адресаты:
Так в принципе все устраивает , очень довольна Вашей работой. Если только остальные эксперты чем может помогут .
Неизвестный
13.01.2012, 00:43
общий
на счёт окошек неограниченного размера - посмотри https://rfpro.ru/question/184883
... более подходящего примера у меня на этом сайте нет
просто выводишь данные в стандартную DBMemo подходящего размера и с возможностью прокрутки.. и всё.
Неизвестный
13.01.2012, 02:21
общий
Адресаты:
Я бы посоветовал выбор пользователя при входе сделать через выпадающий список, останется ввести только пароль - иначе надоест каждый раз вводить.

Также при выходе из режима Администратора, выскакивает окно выбора пользователя. Если нажать "Отмена", логичнее было бы вернуться в режим Администратора, либо завершить приложение, а не открывать набор данных в режиме просмотра пользователя (хотя пользователь admin).

При выборе "Режим администратора" и вводе обычного пользователя (не admin) происходит тоже самое, что и при нажатии "Выбрать пользователя",
как и обратное,
если нажать "Выбрать пользователя" и указать admin'а.
Можно один из двух пунктов ("Выбрать пользователя" и "Режим администратора") убрать.

Запретить под админом изменять и добавлять данные - только просмотр и удаление.

Можно регистрировать пользователя с пустым логином, более того, можно создавать пользователей с таким же логином. (При входе ввести не существующего пользователя, далее в окне регистрации вводи все что хочешь, хоть второго admin'а). Правда зайти под вторым пользователем не получиться, так как он всегда будет находить в таблице первоначально старого пользователя (так как он первее в списке).
Здесь бы я по рекомендовал пользователей идентифицировать в таблице не по логину (строка), а по ID (самое простое - счетчик) и связать таблицу "Журнал" с таблицей "Пользователи" по ID пользователя. А не просто подставлять логин пользователя в таблицу "Журнал".

Нельзя добавлять пользователей используя меню "регистрация нового пользователя" (выскакивает сообщение "Пользователь с таким логином уже существует"). У меня получилось только при входе, когда указан не существующий пользователь.

Чисто эстетически:
1) форма регистрации нового пользователя: запретить изменение размера (лучше сделать вид Dialog), убрать кнопки свернуть и развернуть, в Edit'ах ограничить кол-во символов.
2) форма входа: поставить ограничения на кол-во вводимых символов в edit'ы.

Что касается расширения ячейки, помню сам сталкивался с такой проблемой. Так и не получилось реализовать должным образом. В delphiworld есть статья Мультистроковый DBGrid, но я думаю ее Вы видели. Проверить нет возможности.

Если необходимо, проще добавить новую форму для Добавления\Редактирования записи, куда разместить к примеру тот же компонент TMemo, для ввода/вывода текста. Данные с формы можно вставлять\обновлять в таблице с помощью запроса, либо использовать DB компоненты.
давно
Профессионал
153662
1070
13.01.2012, 06:55
общий
13.01.2012, 08:07
Цитата: 244497
Что касается расширения ячейки, помню сам сталкивался с такой проблемой. Так и не получилось реализовать должным образом. В delphiworld есть статья Мультистроковый DBGrid, но я думаю ее Вы видели. Проверить нет возможности.
Статью эту видел конечно, не вышло по ней.
Цитата: 244497
Если необходимо, проще добавить новую форму для Добавления\Редактирования записи, куда разместить к примеру тот же компонент TMemo, для ввода/вывода текста. Данные с формы можно вставлять\обновлять в таблице с помощью запроса, либо использовать DB компоненты.
Я так уже предлогал Любе.
Цитата: 244497
Я бы посоветовал выбор пользователя при входе сделать через выпадающий список, останется ввести только пароль - иначе надоест каждый раз вводить.
Я тоже над этим уже подумывал.
Цитата: 244497
Можно регистрировать пользователя с пустым логином, более того, можно создавать пользователей с таким же логином. (При входе ввести не существующего пользователя, далее в окне регистрации вводи все что хочешь, хоть второго admin'а).
Да пропустил это, исправлю.
Над остальным стоит подумать. Спасибо.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
13.01.2012, 07:00
общий
Цитата: 388018
просто выводишь данные в стандартную DBMemo подходящего размера и с возможностью прокрутки.. и всё.
Такая возможность не понравилась автору вопроса.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
13.01.2012, 08:12
общий
вероятнее всего автору не понравилась не сам компонент, а как он был использован..
что понятно - это зависит от дизайна.. в твоей программе DBMemo на самом деле некуда воткнуть
можно его всплывающим окном подцепить. по двойному щелчку мышью, например.. но тогда придётся отслеживать это "событие"
что тянет за собой кучу глюков
давно
Профессионал
153662
1070
13.01.2012, 08:24
общий
13.01.2012, 09:05
Цитата: 244497
Здесь бы я по рекомендовал пользователей идентифицировать в таблице не по логину (строка), а по ID (самое простое - счетчик) и связать таблицу "Журнал" с таблицей "Пользователи" по ID пользователя. А не просто подставлять логин пользователя в таблицу "Журнал".
Мне кажется почему бы и не использовать логин для идентификации, всё равно их не может быть два одинаковых.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
13.01.2012, 09:06
общий
13.01.2012, 09:12
Цитата: 388018
вероятнее всего автору не понравилась не сам компонент, а как он был использован..
что понятно - это зависит от дизайна.. в твоей программе DBMemo на самом деле некуда воткнуть smile

Возможно, я уменьшал ширину сетки и ставил мемо справа. С двойным щелчком и всплывающим мемо не догадался, можно покумекать.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
13.01.2012, 09:59
общий
Адресаты:
как вариант при выходе текста за границу столбца:
при подведении курсора мыши к ячейке (или при непосредственном выборе ячейки) выводить содержимое в DBGrid1.Hint в виде подсказки, предварительно разбив данную строку на несколько строк.
Вот примерная реализация - выводит подсказку при выборе мышкой ячейки определенного столбца.
Код:

...
type
TDBGr = class(TDBGrid);
...
procedure TForm1.DBGrid1CellClick(Column: TColumn);
const LengthHintString = 10;
var
ColNo, RowNo: integer;
function FormatString(st: string):string;
var i: byte;
begin
result:='';
if Length(st)<LengthHintString then
begin
result:=st;
exit;
end;
i:=0;
while i<Length(st) do
begin
result:=result+Copy(st,i,LengthHintString);
i:=i+LengthHintString+1;
if i<Length(st) then result:=result+#10#13;
end;
end;
begin
ColNo:= TDBGr(DBGrid1).Col;
RowNo:= TDBGr(DBGrid1).Row;
if ColNo=3 then
begin
with DataSource1.DataSet do
DBGrid1.Hint:=FormatString(FieldByName(DBGrid1.Columns[ColNo-1].FieldName).AsString);
DBGrid1.ShowHint:=true;
end
else DBGrid1.ShowHint:=false;
end;


Безусловно ее можно модифицировать (к примеру: выводить подсказку только в том случае, если текст вышел за границы ячейки; привязать размер строки подсказки к ширине столбца, воводить подсказку при наведении указателя к нужной ячейки и т.п.):

Также в форме регистрации можно установить кнопку по умолчанию "Да".
Что касается остального - все отлично!
давно
Профессионал
153662
1070
13.01.2012, 16:14
общий
13.01.2012, 16:16
В общем вот что на данный момент получилось. Для подсказки решил использовать стандартное memo в режиме только для чтения, меньше заморочек с разбивкой строки на части.
Прикрепленные файлы:
f286ead92ef5f250788c2135b6344d0b.rar
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
13.01.2012, 17:03
общий
Адресаты:
Все даже очень замечательно все устраивает.
давно
Профессионал
153662
1070
13.01.2012, 17:15
общий
Тогда оформляю ответ? ОК.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
13.01.2012, 18:57
общий
Адресаты:
Да можно оформлять
давно
Профессионал
153662
1070
13.01.2012, 20:02
общий
это ответ
Здравствуйте, luba tixomirova!
Программа использует базу данных access, пароль на базу kloi/[]. Программа и проект в прикреплённом к ответу файле. Логин \ пароль администратора admin \ admin, изменить его в процессе выполнения программы нельзя, только менять в исходнике. Дата выставляется автоматически при первом нажатии клавиши в поле "дата". В режиме администратор возможность изменять данные дежурств отключена. При удалении пользователя его дежурства в сводной таблице остаются.
Прикрепленные файлы:
5
Работа выполнена в лучшем качестве, вы просто превзошли мои ожидая , выражаю огромную благодарность и постараюсь в ближайшее время пополнить Ваш кошелек.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
13.01.2012, 20:07
общий
Небольшой комментарий к ответу. У меня в проекте используются стандартные диалоги делфи, в котором модифицирован файл Consts.pas, поэтому если у Вас этот файл не русифицирован, то при компиляции у Вас все диалоговые окна проекта помяняют свои заголовки и надписи на кнопках на стандартные английские надписи.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
13.01.2012, 22:03
общий
Огромное спасибо всем кто участвовал в решении вопроса. От чистого сердца
Форма ответа