Вопрос № 127248: Проблема следующего характера, подскажите как правильно закрыть приложение.
Создаю библиотеку с формой и приложение которое ее(библиотеку) вызывает.
Поработав с формой из dll"ки я ее закрываю. и тут становится выдлимой форма самого прол...Вопрос № 127271: Здравствуйте, господа Эксперты!
Есть потребность найти в интернете бесплатную версию Delphi, желательно - Delphi 7. Нужно так же лицензионное соглашение к доступной версии, которое избавит от проблем с проверяющими органами. Помогите ссылкам...Вопрос № 127276: На основной форме есть PopupMenu. При нажатии, скажем кнопки, создаются новые формы методом Create,
им назначается это PopupMenu, количество форм заранее неизвестно.
Как узнать на какой из созданых форм вызвано это PopupMenu.
Как правильн...Вопрос № 127311: Здравствуйте, уважаемые эксперты! У меня возникла небольшая проблемка: не получается создатть типизированый файл типа запись. Код в приложении. Заранее спасибо....Вопрос № 127349: Здравствуйте господа эксперты. Возникла необходимость складывать время, есть ли в дэлфи функции для работы со временем в формате больше чем 24 часа (например 25:59:59), а то использование функции собственного
производства не всегда удобно (когда нужн...
Вопрос № 127.248
Проблема следующего характера, подскажите как правильно закрыть приложение.
Создаю библиотеку с формой и приложение которое ее(библиотеку) вызывает.
Поработав с формой из dll"ки я ее закрываю. и тут становится выдлимой форма самого проложения, которая мне собственно ни к селу ни к городу. Как бы так сделать что бы она закрывалась одновременно с закрытием формы которая содержится в библиотеке?
Приложение:
Отправлен: 14.03.2008, 08:11
Вопрос задал: василий1 (статус: 3-ий класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Raptor3
Здравствуйте, василий1!
вместо этого куска
procedure TForm1.FormCreate(Sender: TObject);
begin
caption:= inttostr(ShowFormInDLL('hello'));
end;
Повесить этот кусок
procedure TForm1.FormShow(Sender: TObject);
begin
caption:= inttostr(ShowFormInDLL('hello'));
close;
end;
--------- Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете
Ответ отправил: Raptor3 (статус: 6-ой класс)
Ответ отправлен: 14.03.2008, 08:25 Оценка за ответ: 4 Комментарий оценки: Вы знаете, проблема не исчезла, закрытие происходит с ошибкой.
*** raised exeption EInvalidPointer with message
"invalid pointer operation"....
Отвечает: Selya
Здравствуйте, василий1!
Ну конечно становится видимой! Ведь вы поместили её запуск в обработчик OnCreate главной формы!
Закрыв форму из Dll-ки обработка кода продолжается дальше в обычном режиме. Ваша пара exe-dll неправильно спроектированы. К сожалению не знаю для какой цели это надо мало данных.
Да, и ещё при закрытии - Invalid Pointer Operation.
Посмотрите свой dpr:
Application.CreateForm(TForm1, Form1);
Application.Run;
Т.е. отрабатывает ваш код, который в OnCreate, а затем происходит Application.Run
Следовательно надо не допустить этого Run:
Но это для вашего случая, повторяю, это не правильное проектирование приложения (формочка всё равно "моргнёт"). А как правильно, я смогу сказать, побнее узнав, для чего это надо.
Все вопросы в приват.
Ответ отправил: Selya (статус: 9-ый класс)
Ответ отправлен: 14.03.2008, 21:35 Оценка за ответ: 4 Комментарий оценки: спасибо за ответ) проблема была решена вчера, на просторах минифорума)
Вопрос № 127.271
Здравствуйте, господа Эксперты!
Есть потребность найти в интернете бесплатную версию Delphi, желательно - Delphi 7. Нужно так же лицензионное соглашение к доступной версии, которое избавит от проблем с проверяющими органами. Помогите ссылками.
Отправлен: 14.03.2008, 11:28
Вопрос задал: Delph (статус: Студент)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Boriss
Здравствуйте, Delph!
Бесплатного Delphi 7 не бывает. Есть более-менее сносный его аналог Turbo Delphi
При бесплатной регистрации Вам дается лицензия на 10 лет
--------- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор) Россия, Саранск Организация: Мордовский госуниверситет, Саранск Факультет Электронной Техники WWW:Программирование на Паскале ---- Ответ отправлен: 14.03.2008, 12:26 Оценка за ответ: 5 Комментарий оценки: Благодарю за помощь!
Отвечает: Raptor3
Здравствуйте, Delph!
Turbo Delphi Explorer
http://www.turboexplorer.com/
7 версию бесплатную не найдете :)
--------- Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете
Ответ отправил: Raptor3 (статус: 6-ой класс)
Ответ отправлен: 14.03.2008, 12:32 Оценка за ответ: 5 Комментарий оценки: Благодарю за помощь!
Отвечает: Denisss
Здравствуйте, Delph!
Из бесплатных версий Delphi, насколько мне известно, существует только Turbo Delphi Explorer. У нее есть ряд ограничений (например, сторонние VCL компоненты можно подключать только динамически, во время работы приложения).
Cкачать можно здесь: ссылка
Также можно обратить внимание на Lazarus - OpenSource проект, использующий в качестве компилятора Free Pascal Compiler (распространяется под лицензией GPL) и библиотеки компонентов FCL и LCL (аналоги VCL, распространяются под лицензией LGPL).
С уважением,
Denisss --------- Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...
Ответ отправил: Denisss (статус: Профессионал) Россия, Москва ICQ: 281599577 ---- Ответ отправлен: 14.03.2008, 12:34 Оценка за ответ: 5 Комментарий оценки: Благодарю за помощь!
Вопрос № 127.276
На основной форме есть PopupMenu. При нажатии, скажем кнопки, создаются новые формы методом Create,
им назначается это PopupMenu, количество форм заранее неизвестно.
Как узнать на какой из созданых форм вызвано это PopupMenu.
Как правильно назначить какое-то событие на onMouseDown созданной формы.
Как правильно такую форму уничтожать?
Как получить дескриптор такого окна?
Спасибо всем ответившим.
Отвечает: Sosedov A.I.
Здравствуйте, Чмых Олег Васильевич!
Как узнать на какой из созданых форм вызвано это PopupMenu.
Ответ: В обработчик события OnClick выбранного пункта меню передается параметр Sender, это объект класса TMenuItem. Используя следующее выражение
((Sender as TMenuItem).GetParentMenu as TPOpupMenu).PopupComponent as TForm
можно получить объект компонента, с которого вызвано PopupMenu, в данном случае - форму.
Как правильно назначить какое-то событие на onMouseDown созданной формы.
Ответ:
1. В разделе описания класса основной Вашей формы вставьте процедуру (назовем ее Opps) со списком параметров, идентичным типу TMouseEvent.
2. В процедуре создания Ваших новых форм вставьте строку
OnMouseDown := Opps;
3. Программируйте процедуру Opps.
Как правильно такую форму уничтожать?
Ответ: Обычным методом Free.
Как получить дескриптор такого окна?
Ответ: У созданного объекта класса TForm есть свойство Handle.
В приложении я разместил поясняющий ответы пример. Создайте форму, разместите на ней 2 кнопки TButton, 1 TLabel и одно TPopupMenu с именем PM, содержащее одну строку. Затем вставьте пример из приложения. Важно: пример ни в коей мере не претендует быть правильной реализацией Ваших задумок, он только демонстрирует работоспособность моих ответов.
Приложение:
Ответ отправил: Sosedov A.I. (статус: 4-ый класс)
Ответ отправлен: 17.03.2008, 11:14 Оценка за ответ: 5 Комментарий оценки: Спасибо за такой полный ответ. Про Sender и Handle я знал, только не знал как его использовать (построить такую конструкцию) ((Sender as TMenuItem).GetParentMenu as TPopupMenu).PopupComponent as TForm. А делая свою процедуру я видно "перемудрил", все оказалось проще.
Вопрос № 127.311
Здравствуйте, уважаемые эксперты! У меня возникла небольшая проблемка: не получается создатть типизированый файл типа запись. Код в приложении. Заранее спасибо.
Отвечает: Boriss
Здравствуйте, Евчик Сергей Александрович!
Все от того, что неопределены размеры строк. Именно их нужно инициализировать. Все станет на места, если напишите примерно так:
libr = record
name_res:string[20];
login:string[10];
password:string[10];
discription:string[10];
end;
--------- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор) Россия, Саранск Организация: Мордовский госуниверситет, Саранск Факультет Электронной Техники WWW:Программирование на Паскале ---- Ответ отправлен: 14.03.2008, 16:55
Отвечает: Ranmasao
Здравствуйте, Евчик Сергей Александрович!
скорее всего проблема в том, что надо четко определить размеры для строк (например использовать String[255]), либо взять тип ShortString.
Ответ отправил: Ranmasao (статус: 2-ой класс)
Ответ отправлен: 14.03.2008, 18:34 Оценка за ответ: 5
Отвечает: Selya
Здравствуйте, Евчик Сергей Александрович!
Попробуйте в рекорде вместо string использовать array[1..255] of Char или ShortString (что почти одно и то же), так как string это слишком много для записи, которая потом учавствует в file of
См. справку Delphi:
Type '%s' needs finalization - not allowed in file type (E2155)
Приложение:
Ответ отправил: Selya (статус: 9-ый класс)
Ответ отправлен: 14.03.2008, 21:53 Оценка за ответ: 5
Вопрос № 127.349
Здравствуйте господа эксперты. Возникла необходимость складывать время, есть ли в дэлфи функции для работы со временем в формате больше чем 24 часа (например 25:59:59), а то использование функции собственного производства не всегда удобно (когда нужно одновременно подсчитать до 6 сумм, одна фукция не подходит, а увеличение их приводит с росту кода). Заранее спасибо всем ответившим.
Отправлен: 14.03.2008, 21:13
Вопрос задал: Genia007 (статус: 8-ой класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 9)
Отвечает: Louken
Здравствуйте, Genia007!
Могу предлодить такой нехитрый способ:
var dt: TDateTime;
lHour, lMinute, lSecond, lMilliSecond: Word;
begin
dt:=StrToTime('22:59:59');
dt:=dt+StrToTime('2:15:12');
dt:=dt+StrToTime('22:59:59');
dt:=dt+StrToTime('5:23:15');
dt:=dt+StrToTime('10:46:51');
В юните DateUtils очень много разных методов для работы с временем и датами, так что, если что то понадобиться, то я думаю без труда найдете там нужный метод.
Ответ отправил: Louken (статус: Студент)
Ответ отправлен: 14.03.2008, 22:57 Оценка за ответ: 5 Комментарий оценки: Спасибо, но я тоже сделал что - то подобное, только с большим числом переменных, у меня расчет начинается не с перевода строки во время , а с его разложения на состовляющие.