Форум: "Начинающим";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];
ВнизИзменения размеров формы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.009 c