Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.31;
Скачать: CL | DM;

Вниз

Изменения размеров формы   Найти похожие ветки 

 
NVMZ   (2009-04-11 02:56) [0]

Как сделать форму, чтобы она раздвигалась по X и не раздвигалось по Y пользователем, причем при изменении размеров кнопок управления окном элементы формы рисовались правильно (не накладывались друг на друга)?
Необходимо, чтобы работало в NT-2000


 
Германн ©   (2009-04-11 03:17) [1]


>
> NVMZ   (11.04.09 02:56)
>
> Как сделать форму, чтобы она раздвигалась по X и не раздвигалось
> по Y пользователем, причем при изменении размеров кнопок
> управления окном элементы формы рисовались правильно (не
> накладывались друг на друга)?

Невидимы твои пути, создатель! :)

P.S.
А на русский вопрос перевести?:
Или дать пример, блин, кода?


 
NVMZ   (2009-04-11 04:01) [2]

Ну, не знаю, как лучше сформулировать вопрос. Думаю, что Свойства:Экран-Оформление-Элемент(Кнопки управления окном - Размеры), прояснят заданный вопрос.


 
Григорьев Антон ©   (2009-04-11 07:48) [3]

Есть такое свойство - Constraints, -  которое определяет ограничения на размеры окна. Если через него на высоту установить одинаковый максимальный и минимальный размер, то у такого оуна можно будет менять только ширину.

Что касается правильного расположения компоннтов, то в такой общей формулировке вопрос не имеет ответа. Всё сильно зависит от того, что в вашем конкретном случае является критерием правильности, а также от того, какие именно компоненты используются.


 
NVMZ   (2009-04-12 01:16) [4]

Форма простая - например, одна кнопка OK. А лучше - Edit, привязанный к левому и правому краю. А кнопка привязана к правому краю. Если установить:
Constraints.MaxHeight:=H; (H-высота формы)
Constraints.MaxWidth:=0;
Constraints.MinHeight:=H;
Constraints.MinWidth:=W; (W -Минимальная ширина формы), то форма будет вести себя, как задано в вопросе. Но при изменении размеров кнопок управления окном элементы формы (средствами Windows, значительное увеличение) кнопка будет накладываться на элемент Edit. Т.е. Constraints как раз и мешает.
Можно, конечно, в OnResize:
ClientHeight:=Hcl; (Hcl-высота клиентской части формы), но при этом форма "мигает" при попытки изменить высоту.
Событие WM_SETTINGCHANGE приходит после перерисовке формы;
Пробовал в OnCanResize что-то подобное делать. Тоже плохо.


 
Германн ©   (2009-04-12 01:26) [5]


> NVMZ   (12.04.09 01:16) [4]

Похоже ты ищешь простой ответ на "вечный" вопрос. :(
Я лично не видел пока программ, которые "идеально" бы выглядели при ЛЮБЫХ настройках Windows.


 
Кролик Иа-Иа2   (2009-04-12 03:13) [6]

Удалено модератором


 
Юрий Зотов ©   (2009-04-12 13:09) [7]


type
 TForm1 = class(TForm)
 private
   procedure WMSizing(var Message: TWMMoving); message WM_SIZING;
   procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
 end;

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
 inherited;
 with Message do
 case Result of
   HTTOP, HTBOTTOM:
     Result := HTNOWHERE;
   HTTOPLEFT, HTBOTTOMLEFT:
     Result := HTLEFT;
   HTTOPRIGHT, HTBOTTOMRIGHT:
     Result := HTRIGHT
 end
end;

procedure TForm1.WMSizing(var Message: TWMMoving);
begin
 with Message, DragRect^ do
   case Edge of
     WMSZ_BOTTOM, WMSZ_BOTTOMLEFT, WMSZ_BOTTOMRIGHT:
       Bottom := Top + Height;
     WMSZ_TOP, WMSZ_TOPLEFT, WMSZ_TOPRIGHT:
       Top := Bottom - Height
   end;
 inherited
end;

PS
Ну не люблю я Constraints, глючат они.


 
NVMZ   (2009-04-12 23:06) [8]

С утра хотел написать, что я думаю об форуме. Типа нет ни одного Мастера на форуме, и перенесли серьезный вопрос в раздел "Начинающим".
Однако.... Ответ Юрия Зотова меня порадовал - есть Мастера! Предложенное решение очень элегантное. Мой коллектив до этого не до пер.
На тестовых примерах работает великолепно, сегодня вставлю в основную программу и завтра отдам тестировщикам. Одного не понял - зачем нужен метод procedure WMSizing(var Message: TWMMoving); message WM_SIZING;. Вроде и без него работает. Если Вас не затруднит, сообщите.

Спасибо, Юрий!

Николай Макаров-Землянский, д.т.н., профессор МГУ, зав. лаб. Компьютерной безопасности НИВЦ МГУ.


 
Юрий Зотов ©   (2009-04-12 23:39) [9]

> зачем нужен метод procedure WMSizing(var Message: TWMMoving)

Чтобы запретить изменение вертикального размера формы... с клавиатуры. Через системное меню.
:o)

P.S.
Николай, поверьте, здесь немало Настоящих Мастеров. И именно с большой буквы. И даже совсем не обязательно с голубым значком. Кстати, мой ответ к Мастерским вовсе не относится - это всего лишь азбука Windows.

P.P.S.
Просто у этого форума есть некоторые особенности. Увы.
:o)

P.P.P.S.
Но к ним можно привыкнуть. Или к ним можно отнестись с юмором. Резвятся хлопцы... ну и пусть себе. Пройдет постепенно.
:о)

Кстати, среди этих резвящихся хлопцев тоже есть Настоящие Мастера.
Чес-слово.
:o)


 
Германн ©   (2009-04-13 00:58) [10]


> NVMZ   (12.04.09 23:06) [8]
>
> С утра хотел написать, что я думаю об форуме. Типа нет ни
> одного Мастера на форуме, и перенесли серьезный вопрос в
> раздел "Начинающим".

Хорошо что расхотел :)
Однако, если на сём форуме и далее есть желание получать ответы, то стОит поучиться задавать вопросы так, чтобы максимально снизить количество "уточняющих" вопросов.


 
Германн ©   (2009-04-13 01:58) [11]

Да и "зав. лаб." меня смущает...
:(


 
Kolan ©   (2009-04-14 14:59) [12]

Возможно для того, чтобы контролы не накладывались им нужно задать правильные якоря (anchors).


 
NVMZ   (2009-04-15 01:50) [13]

Естественно, что все якоря у элементов формы стоят правильно. Исчерпывающий ответ на мой вопрос дал Юрий Зотов (7-ое сообщение).


 
Германн ©   (2009-04-15 02:06) [14]


> NVMZ   (15.04.09 01:50) [13]
>
> Естественно, что все якоря у элементов формы стоят правильно.
>  Исчерпывающий ответ на мой вопрос дал Юрий Зотов (7-ое
> сообщение).
>

Якоря то стоят. Я в этом не сомневаюсь.
Я сомневаюсь только в том, что ответ Юрий Зотов ©   (12.04.09 23:39) [9] исчерпывающий.
Но не потому, что ЮЗ чего-то не знает. (он то многое знает, на то он и ЮЗ :)
Я всё ещё не полностью понимаю твой вопрос.
Может дело в том, что я такой тупой!?


 
Игорь Шевченко ©   (2009-04-15 02:37) [15]

NVMZ   (12.04.09 23:06) [8]


> С утра хотел написать, что я думаю об форуме. Типа нет ни
> одного Мастера на форуме


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


 
Германн ©   (2009-04-15 02:51) [16]


> Игорь Шевченко ©   (15.04.09 02:37) [15]

Игорь, не стоит так кипятиться по такому поводу!
Или ты не встречал "начальников" с" псевдо" степенями?
Не верю. :)


 
Германн ©   (2009-04-15 03:10) [17]

Ох, сколько я встречал подобных!


 
KSergey ©   (2009-04-15 07:42) [18]

> NVMZ   (12.04.09 23:06) [8]
> С утра хотел написать, что я думаю об форуме.

Удивительное дело! По-русски понятно изложить чего ж надобно - не умеем, зато мнеие об окружающих составить - это легко.


 
KSergey ©   (2009-04-15 07:44) [19]

Вопросик топикстартеру можно?
Я не понял как метод, предложенный ЮЗ, решил вашу проблему с наезжанием контролов? По сути это другая реализация поведения constraint, если надо не позволять изменять вертикальный размер. Чем он принципиально (для вас! мотивы ЮЗ я понимаю) лучше?


 
NVMZ   (2009-04-15 20:19) [20]

Я не буду отвечать на наезды Германна типа:
"Или ты не встречал "начальников" с" псевдо" степенями?"
Кто меня знает, тот просто улыбнется.

Отвечаю на вопрос KSergey.  Если сделать форму, как сказано в [4], то при изменении размеров кнопок управления окном, элементы формы будут наезжать друг на друга. Это даже видно в примере, который выдается при этом действии.
Суть состоит в том, что элементы формы располагаются на поле высотой = ClientHeight, а задание Constraints.MaxHeight не дает увеличить высоту всей формы (Height). Таким образом при увеличении размеров заголовка окна (например, путем увеличения размеров кнопок управления окном) ClientHeight будет уменьшана. Что приведет к тому, что элементы наедут друг на друга.
Алгоритм Юрия Зотова решил мою проблему.


 
NVMZ   (2009-04-15 20:39) [21]

Персонально для Германна (но можно и для всех). Если Вы такой крутой Мастер, то предложите решение следующей задачи:
"Необходимо вычислить сумму чисел (вещественных - double), вводимых с клавиатуры, без записи их в массив (память)". Т.е. пользователь вводит последовательно числа, программа их суммирует, пользователь вводит Enter, программа выдает ответ.


 
Игорь Шевченко ©   (2009-04-15 20:42) [22]


> Если Вы такой крутой Мастер


мы тут вообще не крутые ни разу и на слабо тоже не ведемся. Это в порядке справки информация.


 
NVMZ   (2009-04-15 21:01) [23]

Добавление к [21]. А то опять обвинят, что вопрос не понятный.
Процессор - Intel Pentium (любой). ОС - Windows, UNIX (любые). Система программирования - C, Pacal/Delphi.


 
Игорь Шевченко ©   (2009-04-15 21:32) [24]


> "Необходимо вычислить сумму чисел (вещественных - double),
>  вводимых с клавиатуры, без записи их в массив (память)".
>  Т.е. пользователь вводит последовательно числа, программа
> их суммирует, пользователь вводит Enter, программа выдает
> ответ.


Можно глупый вопрос - а нафига такая программа нужна ?


 
Anatoly Podgoretsky ©   (2009-04-15 21:40) [25]

> Игорь Шевченко  (15.04.2009 21:32:24)  [24]

Без нее зачет не получить.


 
NVMZ   (2009-04-15 21:46) [26]


> Можно глупый вопрос - а нафига такая программа нужна ?

С датчика поступают данные. Очень много - в память не умещаются. Через неделю работы программы надо получить их сумму.


 
app ©   (2009-04-15 21:46) [27]

Один вопрос одна ветка, два вопроса две ветки и т.д.


 
@!!ex ©   (2009-04-15 22:08) [28]

> [21] NVMZ   (15.04.09 20:39)

А это проблема вообще??
Счетчик и к нему при каждом вводе прибавляется новое значение.
Задачка для дебилов, но никак не для мастеров(может я опять вопроса не понял??)


 
Юрий Зотов ©   (2009-04-15 22:44) [29]

> NVMZ   (15.04.09 20:39) [21]

Николай, Вы, конечно, извините, но профессору МГУ, да еще и д.т.н. задавать подобные вопросы просто стыдно. Эта задачка для детишек, которые только-только начали изучать любой язык. Пишется такая программа за 5 минут, без всякого преувеличения и без малейших раздумий. Например:

var
 S: string = "";
 Sum: double = 0;
begin
 while UpperCase(S) <> "SUM" do
 begin
   ReadLn(S);
   Sum := Sum + StrToFloatDef(S, 0)
 end;
 WriteLn(Sum);
 ReadLn
end.

В связи с чем вынужден огорчиться. Если профессор и д.т.н. не может этого сделать, то чего же следует ожидать от его студентов?


 
NVMZ   (2009-04-15 22:52) [30]


> Пишется такая программа за 5 минут, без всякого преувеличения
> и без малейших раздумий

Пример входных значений:
1, 1e30, 1, -1e30
Правильный ответ - 2.
Ваша программа даст - 0.


 
AndreyV ©   (2009-04-15 23:02) [31]

> [30] NVMZ   (15.04.09 22:52)
> Пример входных значений:
> 1, 1e30, 1, -1e30
> Правильный ответ - 2.
> Ваша программа даст - 0.

Начинают открываться скрытые условия.


 
Юрий Зотов ©   (2009-04-15 23:11) [32]

> NVMZ   (15.04.09 22:52) [30]

Николай, не смешите. Особенности работы с числами, отличающимися на много порядков, я знаю не хуже Вас (плохо обусловленных систем нарешался в свое время). Но кроме этого я знаю еще и технику, а потому ни за что не поверю, что Ваш датчик способен выдавать сигнал в диапазоне от -1e30 до +1e30. Вы это просто придумали. Извините, из пальца.


 
NVMZ   (2009-04-15 23:22) [33]


> Ваш датчик способен выдавать сигнал в диапазоне от -1e30
> до +1e30. Вы это просто придумали.

Датчик придумал в ответ на вопрос:

> Можно глупый вопрос - а нафига такая программа нужна ?

Это задача 1-го семестра 1-го курса мех-мата МГУ. В форуме есть такой ответ:

> Без нее зачет не получить

Я ее привел для Германна. Вроде простая задача, но не все так просто.
Однако решение ее существует. Я знаю два. Одно мое. Другое студенты предложили.


 
Юрий Зотов ©   (2009-04-15 23:28) [34]

> NVMZ   (15.04.09 23:22) [33]

Навскидку - еще одно решение (на его оригинальность не претендую): разбиваем диапазон датчика на поддиапазоны, при вводе считаем частичные суммы, в конце считаем общую.


 
Игорь Шевченко ©   (2009-04-15 23:41) [35]


>  Я знаю два. Одно мое


другое неправильное.

Вы бы эта...уважаемый доктор всея Руси, со своими вопросами на засыпку шли бы в http://www.delphimaster.ru/cgi-bin/forum.pl?n=3


 
NVMZ   (2009-04-15 23:44) [36]


> Навскидку - еще одно решение (на его оригинальность не претендую):
>  разбиваем диапазон датчика на поддиапазоны, при вводе считаем
> частичные суммы, в конце считаем общую.

Да. Это правильно! По-моему, там будет 37(?) таких переменных (частичные суммы).
Второе решение - написать свою арифметику. За это решение я поставил зачет-автомат.
Кстати, на БЭСМ-6 Ваша программа будет работать правильно. Надеюсь, Вам пояснять не надо.
Однако можно открыть дискуссию "машинная арифметика для начинающих" (как добавить смайлик не знаю).

Очень приятно с Вами общаться! Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2009.05.31;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.015 c
15-1238329433
Leonid Troyanovsky
2009-03-29 16:23
2009.05.31
Кто идет на Сонни Лэндрет?


2-1239737644
Новичок
2009-04-14 23:34
2009.05.31
Фильтрация по поисковому полю


2-1237214993
Alex354
2009-03-16 17:49
2009.05.31
Печатать изображение без учёта границ непечатаемых полей


8-1194642408
Blind Guardian
2007-11-10 00:06
2009.05.31
Класс для чтения данных о полигонах 3Д сцен, сделанных в 3ds max


2-1239283727
Franzy
2009-04-09 17:28
2009.05.31
null-terminated strings