Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ MDI приложение.

Автор: Krjuger 26.10.2011 21:16

Собственно задача следующая есть Грид как то заполненный,надо ответить на 2 вопроса. Первый, упорядочена ли Итая строка,второй, найти максимальную разность между элементами первой и последней строк.(имееться в виду макс разность между элементами только в 1 столбце,тобиш не полный перебор, а а11 с аN1 ,а21 с N2 и тд и вывести максимальную.
Какие проблемы возникли ,первое изначльно окошло должно быть весьма маленьким,но когда я запускаю дебаг оно на пол экрана вылегает,в других проектах такого не замечалось,как исправить не знаю.Затем,когда пытаюсь свернуть окошно оно не исчезает, а сворачиваеться в край главного окна,а так же наотрез октазываются работать окно выбора задания,когда я вызываю его из меню или уже из окна самого решения задачи.(Собственно я понимаю,что та функция, что я вызываю, делает совсем не то что надо,но какая нужна, не знаю.И последнее я не совсем понимаю как по дефолту сделать так,чтобы оба chekboxa были включены,даже,если окно с выбиром не было вызвано.
Прикрепляю сей ужос,по другому не назову.


Прикрепленные файлы
Прикрепленный файл  MDI_Delphi.rar ( 421.77 килобайт ) Кол-во скачиваний: 277

Автор: IUnknown 26.10.2011 23:00

Цитата
Затем,когда пытаюсь свернуть окошно оно не исчезает, а сворачиваеться в край главного окна
Welcome to MDI smile.gif Это стандартное поведение MDI-интерфейса...

Цитата
первое изначльно окошло должно быть весьма маленьким,но когда я запускаю дебаг оно на пол экрана вылегает,в других проектах такого не замечалось,как исправить не знаю.
Залезь в его свойства (в Object Inspector-е, я имею в виду) и поменяй Position на poDefaultPosOnly... Тогда при старте значениями CW_USEDEFAULT будет инициализироваться только позиция окна, а его размеры возьмутся из Designer-а.

Насчет
Цитата
наотрез октазываются работать окно выбора задания,когда я вызываю его из меню или уже из окна самого решения задачи
- не понял, последовательность действий озвучь... Кстати, при вызове "Еще - Выбор задачи" прямо сразу после запуска - программа вообще рушится... Это так надо?

P.S. Чего это TfrmInputOutput - не fsMDIChild? Ты уж реши для себя, у тебя MDI-интерфейс, или нет. Если да - то ВСЕ формы должны быть fsMDIChild, кроме главной (которая fsMDIForm). Не надо перемешивать MDI/SDI...

Автор: Krjuger 27.10.2011 0:01

Да просто задание было сделать SDI,что получилось на ура,а потом переделать в MDI,вот и полезли косяки.Эх щас пойду дальше переосмысливать,но чето MDI мне уже начинает ненравится.Пойду воевать)

Автор: Krjuger 27.10.2011 0:55

Так, если я правильно понимаю,то мне надо все мои классы запихнуть в один fsMDIChild, или можно сделать их всех наследуемыми от fsMDIChild? Просто как сделать так,чтобы было MDI,и все окна сразу я представляю,но мне так не хочеться,я бы хотел,чтобы при нажатии на выбор задачи появлялось окно выбира,при нажитии на решение появлялось окно решения.Ну Аbout трогать не стану,пусть так висит.Но как это сделать?

Автор: IUnknown 27.10.2011 2:20

Неправильно понимаешь. Тебе надо у твоей формы, которая сейчас никакая, изменить стиль на fsMDIChild, чтобы она тоже была дочерним MDI-окном. Окно About можешь оставить обычным, оно и в стандартном примере - обычное.

На самом деле - не совсем понятно, какая цель преследовалась теми, кто дал это задание. Просто чтоб помучить? Чтоб поняли, что в MDI то, что создано - то видимо, а невидимых окон быть не может? Зачем это всё?

Цитата
Просто как сделать так,чтобы было MDI,и все окна сразу я представляю,но мне так не хочеться,я бы хотел,чтобы при нажатии на выбор задачи появлялось окно выбира,при нажитии на решение появлялось окно решения
Просто такой закон MDI: скрыть форму нельзя. Зато можно ее удалить, и при необходимости - создать заново. Но это - бред smile.gif

Автор: Krjuger 27.10.2011 20:33

Ну в общем вторая ревизия сей гадости.Поскольку окна дестрояться,надо как то сохратить текущие значения.Моя попытка делать это в классе окна решения потерпела фейл))Где лучше всего их глобально обьявить? Еще есть вопрос,как ограничить формы,чтобы они за пределы главного окна не выезжали.Ну и окна дестрояться только при нажатии закрытия,а при нажатии на Ок при выборе задачи не получилось чето)))


Прикрепленные файлы
Прикрепленный файл  MDI_Delphi.rar ( 431.06 килобайт ) Кол-во скачиваний: 276

Автор: IUnknown 27.10.2011 21:22

Цитата
Ну и окна дестрояться только при нажатии закрытия,а при нажатии на Ок при выборе задачи не получилось чето)))
Что там может не получиться? У тебя ж есть меню, которое вызывает создание и открытие frmInputOutput? Есть. Вот и пользуйся этим...

procedure TMDIChild.btnOkClick(Sender: TObject);
begin
{}
MainForm.N1Click(Sender); // Открываем новое окно
Close; // Закрываем текущее
end;


Цитата
Поскольку окна дестрояться,надо как то сохратить текущие значения.Моя попытка делать это в классе окна решения потерпела фейл))Где лучше всего их глобально обьявить?
Лучше всего - в классе TMainForm. Чего там тебе сохранять в frmType? Два чекбокса? Можешь добавить 2 переменные типа Boolean, в которые будешь сохранять хранить значения чекбоксов перед закрытием формы. А вот с frmInputOutput все гораздо серьезнее smile.gif Там сохранять надо больше, я бы вообще при закрытии этой формы сбрасывал всё нужное в TMemoryStream (опять же, описанный в главной форме), и при открытии - читал бы из него назад в форму... В том же порядке, в котором оно и записывалось.

Автор: Krjuger 27.10.2011 22:19

Цитата
А вот с frmInputOutput все гораздо серьезнее Там сохранять надо больше, я бы вообще при закрытии этой формы сбрасывал всё нужное в TMemoryStream (опять же, описанный в главной форме), и при открытии - читал бы из него назад в форму... В том же порядке, в котором оно и записывалось.

Не это уж фиг,не та задача,чтобы так выкареживаться.
Принципи даже то,что уже есть я могу сдать,но есть один момент.Если его не сложно исправить,то буду рад.В общем мне не нравиться,что можно понаделать десятки одних и других окошек,хотелось бы ,чтобы,если есть окно задачи,то новое не создавать,а работать со старым,если оно свернуло или на заднем плане,то разворачивать и делать активным.То есть в скинутой тобой процедуре нао сделать проверку на существование данного окна....Но я порывшись че то не нашел.

Автор: IUnknown 29.10.2011 12:26

Цитата
В общем мне не нравиться,что можно понаделать десятки одних и других окошек,хотелось бы ,чтобы,если есть окно задачи,то новое не создавать,а работать со старым,если оно свернуло или на заднем плане,то разворачивать и делать активным.
Это противоречит принципам MDI. Дело твое, ковыряйся, может, чего и найдешь, и оно даже иногда будет работать так, как тебе хочется. Но это без меня. Я не занимаюсь вопросами "прилепить пятую ногу зайцу, чтобы была". В этой задаче MDI вообще на фиг не нужен.

Кстати, объясни мне один момент: у тебя в Main.pas есть строки
Цитата
var
MainForm: TMainForm;
frmType: TMdiChild;
frmInPutOutPut: TfrmInputOutput;
implementation
. И подключаются модули "... ImgList, ufrmType, Unit1;" Но в этих двух модулях есть глобальные переменные с теми же именами, frmType и frmInPutOutPut. Внимание, вопрос: это чтоб усложнить отладку, специально сделано так? При малейшем чихе (попытке внести изменения в код Unit1) вылезают сообщения, что меток PresChekBox1 и PresChekBox2 там отродясь не было, а ты с ними работаешь каким-то образом smile.gif В общем,
Цитата
Принципи даже то,что уже есть я могу сдать
- пока рановато... Программа требует доработки...

Автор: Krjuger 29.10.2011 18:14

Цитата
Это противоречит принципам MDI. Дело твое, ковыряйся, может, чего и найдешь, и оно даже иногда будет работать так, как тебе хочется. Но это без меня. Я не занимаюсь вопросами "прилепить пятую ногу зайцу, чтобы была". В этой задаче MDI вообще на фиг не нужен.

Я начинаю в MDI разочаровываться все больше и больше(((

Цитата
Кстати, объясни мне один момент: у тебя в Main.pas есть строки

Чесно....не помню,видимо поначалу хотел как то по другому все сделать,но они не мешали и не пораждали ошибок и я про них забыл, косяк блин(

Ну и на данным момент последняя версия,вроде весьма стабильная.


Прикрепленные файлы
Прикрепленный файл  MDI_Delphi.rar ( 436.34 килобайт ) Кол-во скачиваний: 255