Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 867

/ вопрос решён /

Здравствуйте!
вот такой вопрос, есть форма1 по нажатию на кнопку создаю форму2, в форме 2 по нажатию на кнопку нужно изменить размер формы2. Пробывал и resizeform писать, и ширину с высотой задавал,размер увеличивается но выскакивает ошибка

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

casio Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: casio (статус: Посетитель)
Вопрос отправлен: 9 января 2012, 19:52
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 13; последнее сообщение — 14 января 2012, 10:08; участников в обсуждении: 5.
min@y™

min@y™ (статус: Доктор наук), 9 января 2012, 19:56 [#1]:

Покажи код обработчика OnClick кнопки на 2-й форме.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
casio

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™

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™

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)

meson

meson (статус: 1-ый класс), 10 января 2012, 03:22 [#6]:

min@y™:
Если позволите, два замечания :-)

"точка_с_запятой" перед "else" это наврядли ;-)

И еще одна мелочь. Свойство "Tag" я бы не стала использовать.
Прямой путь к ошибкам...

А вот что мне у Вас понравилось, так это форматирование :-)

PS
Это ни чего, что я вмешиваюсь? Если не кстати, скажите, я удалю ...
min@y™

min@y™ (статус: Доктор наук), 10 января 2012, 08:29 [#7]:

Цитата (meson):

"точка_с_запятой" перед "else" это наврядли ;-)

Ой, ну да ладно тебе придираться! У меня такая ошибка возникает сплошь и рядом, т.к. приходится кодить и на delphi, и на С++.

Цитата (meson):

И еще одна мелочь. Свойство "Tag" я бы не стала использовать. Прямой путь к ошибкам...

Вообще-то это просто пример, однако давай-ка по-подробней: где тут прямой путь к ошибкам?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
meson

meson (статус: 1-ый класс), 10 января 2012, 22:21 [#8]:

meson:
Добрый день,

для начала комплимент тебе - приятно иметь дело с человеком,
который адекватно реагирует на критику :-)

По сути

 ладно тебе придираться
Извини, ты прав. Мелочь это, смахнешь и не заметишь.
Ясно же - не проверил код, да и что там проверять!
Но ведь есть еще и несмышленные_начинающие_новички...

Впрочем, знаю что ты скажешь - новички либо подтянутся, либо их проблема.
И то правда!

 где тут прямой путь к ошибкам

Tag в твоем примере выступает в роли глобальной переменной с не очевидным именем.
Заметь, ты еще конструкцию with Button1 do не применил!
А теперь представь, что через месяц код вырастет на десяток процедур!
А мы из любви к красивым и коротким выражениям в половине из них
этот самый Tag в хвост и в гриву... Да еще и с разными объектами во главе...
А то и не во главе, а в уме (читай - с применением with).
Код получится чистым по формату, спагетти по логике работы.

Фраза недавно попалась - писать код нужно так, как если его
будет сопровождать маньяк-насильник, знающий где ты живешь!

И потом, не зря ведь говорят, что использование Tag в коде - признак плохого тона.

Извини, я сегодня нудный, но мне приходится иногда копаться в
чужом коде с привкусом прошлогоднего спагетти. O_o

PS
Ты там про skype намекал, так я стукну
min@y™

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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
meson

meson (статус: 1-ый класс), 11 января 2012, 22:26 [#10]:

min@y™:
Привет! :-)

Не смею настаивать, каждый пишет как он хочет!

Но раз уж зашла речь о стилистике кода...
В твоем примере я бы написал

if Sender = edInfo then
  ShowMessage('a')
else if (Sender as TLabel).Caption = 'Так_Еще_Лучше' then
  ShowMessage('b');

Так и без комментариев видно о чем идет речь.

А если хочется использовать case можно сделать так

type
  TMyType = (mtChechTimer, mtSmowDate);
  // ...
 
var
  MyParam: TMyType;
  // ...
 
  MyParam := mtSmowDate;
 
case MyParam of
  mtChechTimer: ShowMessage('OK');
  mtSmowDate: ShowMessage(DateToStr(now));
end;

А самое главное - писать так, как привык (как принято в твоей среде) и ни кого не слушать. :-)

Успехов тебе!
min@y™

min@y™ (статус: Доктор наук), 12 января 2012, 08:12 [#11]:

Цитата (meson):

Но раз уж зашла речь о стилистике кода... В твоем примере я бы написал

А если обработчик сделан для 100500 объектов, это ж какой вложенности должна быть конструкция if ... then ... else?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
bugmenot

bugmenot (статус: 3-ий класс), 13 января 2012, 23:27 [#12]:

в теге константу нельзя задать, таким образом ценность сводится если не нулю, то ...
виконання програми розпочинається з того самого мiсця, де призупинилося.

min@y™

min@y™ (статус: Доктор наук), 14 января 2012, 10:08 [#13]:

Цитата (bugmenot):

в теге константу нельзя задать

Это как понимать?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.08 сек.