|
Вопрос # 5 867/ вопрос решён / |
|
Здравствуйте!
вот такой вопрос, есть форма1 по нажатию на кнопку создаю форму2, в форме 2 по нажатию на кнопку нужно изменить размер формы2. Пробывал и resizeform писать, и ширину с высотой задавал,размер увеличивается но выскакивает ошибка
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: casio (статус: Посетитель)
Вопрос отправлен: 9 января 2012, 19:52
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 13; последнее сообщение — 14 января 2012, 10:08; участников в обсуждении: 5.
|
min@y™ (статус: Доктор наук), 9 января 2012, 19:56 [#1]:
Покажи код обработчика OnClick кнопки на 2-й форме.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
casio (статус: Посетитель), 9 января 2012, 20:13 [#2]:
min@y™:
var
uvelishit : boolean = true;
umenchit : boolean = false;
procedure button1click;
begin
if uvelishit = true then //увеличить
begin
Self.Height := 367;
uvelishit := false;
umenchit := true;
exit;
end;
if umenchit = true then //уменьшить
begin
Self.Height := 167;
umenchit := false;
uvelishit := true;
exit;
end;
end;
|
|
Мережников Андрей (статус: Абитуриент), 9 января 2012, 21:30 [#3]:
зачем вводить две переменные, когда достаточно одной? Например, оставляем uvelishit. Переписываем обработчик так:
if (uvelishit)
then begin
//увеличиваем размер
end
else begin
//уменьшаем размер
end;
uvelishit:=not(uvelishit);
end;
|
|
min@y™ (статус: Доктор наук), 9 января 2012, 21:51 [#4]:
Безобразное форматирование кода!
Только после хирургического вмешательства начинаешь понимать, что пытается сделать данный говнокод.
var
uvelishit : boolean = true;
umenchit : boolean = false;
// это точно обработчик события? а то мне всегда казалось,
// что обработчики должны быть методами классов...
// или ты этот код вручную в браузер переписывал?
// про Copy/Paste не в курсе?
procedure button1click;
begin
if uvelishit //увеличить
then begin
Self.Height := 367;
uvelishit := false;
umenchit := true;
exit;
end;
if umenchit //уменьшить
then begin
Self.Height := 167;
umenchit := false;
uvelishit := true;
exit;
end;
end;
// Предположу, что можно сделать как-то так:
procedure TForm2.Button1Click(Sender: TObject);
begin
if Button1.Tag = 0
then begin
Self.Height := 367;
Button1.Tag:= 1;
end
else begin
Self.Height := 167;
Button1.Tag:= 0;
end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 9 января 2012, 21:57 [#5]:
// И (для прикола) ещё вот так можно :))
procedure TForm2.Button1Click(Sender: TObject);
begin
if Height < 300
then Height := 367;
else Height := 167;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
10 января 2012, 00:46: Статус вопроса изменён на решённый (изменил автор вопроса — casio)
|
min@y™ (статус: Доктор наук), 10 января 2012, 08:29 [#7]:
Цитата (meson):
"точка_с_запятой" перед "else" это наврядли
Ой, ну да ладно тебе придираться! У меня такая ошибка возникает сплошь и рядом, т.к. приходится кодить и на delphi, и на С++.
Цитата (meson):
И еще одна мелочь. Свойство "Tag" я бы не стала использовать. Прямой путь к ошибкам...
Вообще-то это просто пример, однако давай-ка по-подробней: где тут прямой путь к ошибкам?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
meson (статус: 1-ый класс), 10 января 2012, 22:21 [#8]:
meson:
Добрый день,
для начала комплимент тебе - приятно иметь дело с человеком,
который адекватно реагирует на критику 
По сути
ладно тебе придираться
Извини, ты прав. Мелочь это, смахнешь и не заметишь.
Ясно же - не проверил код, да и что там проверять!
Но ведь есть еще и несмышленные_начинающие_новички...
Впрочем, знаю что ты скажешь - новички либо подтянутся, либо их проблема.
И то правда!
где тут прямой путь к ошибкам
Tag в твоем примере выступает в роли глобальной переменной с не очевидным именем.
Заметь, ты еще конструкцию with Button1 do не применил!
А теперь представь, что через месяц код вырастет на десяток процедур!
А мы из любви к красивым и коротким выражениям в половине из них
этот самый Tag в хвост и в гриву... Да еще и с разными объектами во главе...
А то и не во главе, а в уме (читай - с применением with).
Код получится чистым по формату, спагетти по логике работы.
Фраза недавно попалась - писать код нужно так, как если его
будет сопровождать маньяк-насильник, знающий где ты живешь!
И потом, не зря ведь говорят, что использование Tag в коде - признак плохого тона.
Извини, я сегодня нудный, но мне приходится иногда копаться в
чужом коде с привкусом прошлогоднего спагетти. 
PS
Ты там про skype намекал, так я стукну
|
|
min@y™ (статус: Доктор наук), 11 января 2012, 08:15 [#9]:
Цитата (meson):
А теперь представь, что через месяц код вырастет на десяток процедур! А мы из любви к красивым и коротким выражениям в половине из них этот самый Tag в хвост и в гриву... Да еще и с разными объектами во главе...
Я просто представил один из способов решения конкретной задачи, вот и всё. Без учёта всего остального.
Цитата (meson):
И потом, не зря ведь говорят, что использование Tag в коде - признак плохого тона.
Это кто ж так говорит-то? Первый раз слышу. Постоянно пользуюсь этим свойством для создания единых обработчиков события для нескольких объектов. Вот пример:
procedure TMainForm.ActionExecute(Sender: TObject);
var
hWndInsertAfter: HWND;
begin
case TComponent(Sender).Tag of
// Сказать время
1: begin
Application.ProcessMessages();
Clocker.SpeakTime();
end;
// Говорить время каждый час
2: Clocker.SpeakEveryHour:= not Clocker.SpeakEveryHour;
// Говорить время каждые полчаса
3: Clocker.SpeakEveryHalfHour:= not Clocker.SpeakEveryHalfHour;
// Свернуть
10: Application.Minimize();
// Развернуть
11: Application.Restore();
// Настройка
20: if ChangeSettings()
then begin
ApplySettings();
Clocker.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Settings.xml');
end;
// Поверх всех окон
21: begin
Clocker.StayOnTop:= not Clocker.StayOnTop;
if Clocker.StayOnTop
then hWndInsertAfter:= HWND_TOPMOST
else hWndInsertAfter:= HWND_NOTOPMOST;
SetWindowPos(Handle, hWndInsertAfter, Left, Top, Width, Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
// Кнопка "Меню"
22: PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
// Что это такое?
50: Application.MessageBox(WhatIsIt,
'Файлы пользователя',
MB_OK + MB_ICONINFORMATION);
// Настройки (звуки юзера)
51: if ChangeSettings(3)
then begin
ApplySettings();
Clocker.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Settings.xml');
end;
// Остановка воспроизведения
55: ThreadQueue.TerminateAllThreads();
// О программе
254: begin
Application.MessageBox(PChar(GetFileVersion()), //AboutText,
PChar('О программе'),
MB_OK + MB_ICONINFORMATION);
end;
// Выход
255: Close();
end; //case
end;
Я не утверждаю, что это на 100% правильно, но мне так нравится.
Цитата (meson):
Ты там про skype намекал, так я стукну
Не надо. На работе у меня нету скайпа, а дома и так дел полно.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 12 января 2012, 08:12 [#11]:
Цитата (meson):
Но раз уж зашла речь о стилистике кода... В твоем примере я бы написал
А если обработчик сделан для 100500 объектов, это ж какой вложенности должна быть конструкция if ... then ... else?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
bugmenot (статус: 3-ий класс), 13 января 2012, 23:27 [#12]:
в теге константу нельзя задать, таким образом ценность сводится если не нулю, то ...
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
min@y™ (статус: Доктор наук), 14 января 2012, 10:08 [#13]:
Цитата (bugmenot):
в теге константу нельзя задать
Это как понимать?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|