| 
| 
 | Вопрос # 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |