Помощь - Поиск - Пользователи - Календарь
Полная версия: MDI приложение.
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Krjuger
Собственно задача следующая есть Грид как то заполненный,надо ответить на 2 вопроса. Первый, упорядочена ли Итая строка,второй, найти максимальную разность между элементами первой и последней строк.(имееться в виду макс разность между элементами только в 1 столбце,тобиш не полный перебор, а а11 с аN1 ,а21 с N2 и тд и вывести максимальную.
Какие проблемы возникли ,первое изначльно окошло должно быть весьма маленьким,но когда я запускаю дебаг оно на пол экрана вылегает,в других проектах такого не замечалось,как исправить не знаю.Затем,когда пытаюсь свернуть окошно оно не исчезает, а сворачиваеться в край главного окна,а так же наотрез октазываются работать окно выбора задания,когда я вызываю его из меню или уже из окна самого решения задачи.(Собственно я понимаю,что та функция, что я вызываю, делает совсем не то что надо,но какая нужна, не знаю.И последнее я не совсем понимаю как по дефолту сделать так,чтобы оба chekboxa были включены,даже,если окно с выбиром не было вызвано.
Прикрепляю сей ужос,по другому не назову.
IUnknown
Цитата
Затем,когда пытаюсь свернуть окошно оно не исчезает, а сворачиваеться в край главного окна
Welcome to MDI smile.gif Это стандартное поведение MDI-интерфейса...

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

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

P.S. Чего это TfrmInputOutput - не fsMDIChild? Ты уж реши для себя, у тебя MDI-интерфейс, или нет. Если да - то ВСЕ формы должны быть fsMDIChild, кроме главной (которая fsMDIForm). Не надо перемешивать MDI/SDI...
Krjuger
Да просто задание было сделать SDI,что получилось на ура,а потом переделать в MDI,вот и полезли косяки.Эх щас пойду дальше переосмысливать,но чето MDI мне уже начинает ненравится.Пойду воевать)
Krjuger
Так, если я правильно понимаю,то мне надо все мои классы запихнуть в один fsMDIChild, или можно сделать их всех наследуемыми от fsMDIChild? Просто как сделать так,чтобы было MDI,и все окна сразу я представляю,но мне так не хочеться,я бы хотел,чтобы при нажатии на выбор задачи появлялось окно выбира,при нажитии на решение появлялось окно решения.Ну Аbout трогать не стану,пусть так висит.Но как это сделать?
IUnknown
Неправильно понимаешь. Тебе надо у твоей формы, которая сейчас никакая, изменить стиль на fsMDIChild, чтобы она тоже была дочерним MDI-окном. Окно About можешь оставить обычным, оно и в стандартном примере - обычное.

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

Цитата
Просто как сделать так,чтобы было MDI,и все окна сразу я представляю,но мне так не хочеться,я бы хотел,чтобы при нажатии на выбор задачи появлялось окно выбира,при нажитии на решение появлялось окно решения
Просто такой закон MDI: скрыть форму нельзя. Зато можно ее удалить, и при необходимости - создать заново. Но это - бред smile.gif
Krjuger
Ну в общем вторая ревизия сей гадости.Поскольку окна дестрояться,надо как то сохратить текущие значения.Моя попытка делать это в классе окна решения потерпела фейл))Где лучше всего их глобально обьявить? Еще есть вопрос,как ограничить формы,чтобы они за пределы главного окна не выезжали.Ну и окна дестрояться только при нажатии закрытия,а при нажатии на Ок при выборе задачи не получилось чето)))
IUnknown
Цитата
Ну и окна дестрояться только при нажатии закрытия,а при нажатии на Ок при выборе задачи не получилось чето)))
Что там может не получиться? У тебя ж есть меню, которое вызывает создание и открытие frmInputOutput? Есть. Вот и пользуйся этим...

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


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

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

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

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

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

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

Ну и на данным момент последняя версия,вроде весьма стабильная.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.