1. Pascal / Говнокод #7345

    +155

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    procedure TForm1.Image1Click(Sender: TObject);
    begin
     sPictureName := Label2.Caption;
     Form2.Show;
    end;
    
    procedure TForm1.Image2Click(Sender: TObject);
    begin
     sPictureName := Label3.Caption;
     Form2.Show;
    end;

    Знаю конечно что уныло, но по моему делать одну процедуру из-за этого слишком геморройно. С тем же массивом из 2-х элементов хотя бы. Говно ли?

    Запостил: Govnocoder#0xFF, 26 Июля 2011

    Комментарии (57) RSS

    • По-моему большее говно - незамененные автоматические имена переменных.
      Ответить
    • если почитать шаблоны проектирования, то можно и без массивов:
      procedure ImageClick(lLabel: TLabel)
      begin
       sPictureName := lLabel.Caption;
       Form2.Show;
      end;
      
      procedure TForm1.Image1Click(Sender: TObject);
      begin
       ImageClick(Label2);
      end;
      
      procedure TForm1.Image2Click(Sender: TObject);
      begin
       ImageClick(Label3);
      end;
      не?
      Ответить
      • ну в общем то да =)
        Ответить
      • шаблоны? o_O just copy and paste it
        Ответить
        • > шаблоны? o_O just copy and paste it
          циклы? процедуры? o_O just copy and paste it
          Ответить
      • Okay. Что вы скажите на это:
        procedure TForm1.BrowseBtn1Click(Sender: TObject);
        begin
         If OpenPictureDialog1.Execute then
          Begin
           If bEnableGoBtn then GoBtn.Enabled := True
           else bEnableGoBtn := True;
           Bitmap1.LoadFromFile(OpenPictureDialog1.FileName);
           Image1.Picture.Bitmap := Bitmap1;
           GroupBox1.Caption := ExtractFileName(OpenPictureDialog1.FileName);
           Image1.Enabled := True;
          End;
        
        end;
        
        procedure TForm1.BrowseBtn2Click(Sender: TObject);
        begin
         If OpenPictureDialog1.Execute then
          Begin
           If bEnableGoBtn then GoBtn.Enabled := True
           else bEnableGoBtn := True;
           Bitmap2.LoadFromFile(OpenPictureDialog1.FileName);
           Image2.Picture.Bitmap := Bitmap2;
           GroupBox2.Caption := ExtractFileName(OpenPictureDialog1.FileName);
           Image2.Enabled := True;
          end;
        end;
        Ответить
      • Нее :)

        procedure ImageClick(const label:string)
        begin
          sPictureName := label;
          Form2.Show;
        end;
        Ответить
        • А может так?
          procedure TForm1.Image1Click(Sender: TObject);
          begin
           If (Sender as TImage).Name = 'Image1' then sPictureName := Label2.Caption
           Else sPictureName := Label3.Caption; 
           Form2.Show;
          end;
          Ответить
          • условненько
            Ответить
            • Функциональненько
              Ответить
              • сравнение со строкой выглядит... неочень = )
                Ответить
                • Okay:
                  If (Sender as TImage) = Image1 then sPictureName := Label2.Caption
                   Else sPictureName := Label3.Caption;
                  Ответить
                  • а кастить обязательно? вдруг подадим не TImage
                    Ответить
                    • Никаких "вдруг", "ВНЕЗАПНО", etc. У меня с этой процедурой работают только 2 имеджа.
                      Ответить
                      • но все же лучше добавить в начало проверку
                        If (Sender Is TImage) или как там правильно в дельфях
                        Ответить
                        • В более крупном проекте я бы так и сделал, но тут - увы.
                          Ответить
                        • а лучше вообще без TImage
                          Ответить
                          • требует ли дельфи кастить для сравнивания? если нет, то и не надо
                            Ответить
                            • Требует. Просто так Sender с TImage не сравнить. Ибо разные типы.
                              Ответить
                              • прокастить к TObject
                                Ответить
                                • Я дико извиняюсь, оказывается можно обойтись без касты. Только сейчас проверил
                                  Ответить
                                • Я говорю о том, что лучше вообще избавится от UI'ной конкретики.
                                  Сегодня это TImage, завтра TAdvImage и т.д. Надежней разбить на два обработчика и общий метод.

                                  PS: Хотя, автору виднее...
                                  Ответить
                                  • > разбить на два обработчика и общий метод
                                    http://govnokod.ru/7345#comment99135
                                    Ответить
                                    • КЭП?
                                      http://govnokod.ru/7345#comment99157
                                      Ответить
                                    • Всем спасибо, но все таки выберу ветвление, т.к. это самый оптимальный выриант
                                      Ответить
          • UPD:
            А в событиях Image2, на OnClick поставить рефер Image1Click.
            Ответить
          • Нет, не так...
            Таким образом вы автоматом (без почвенно) определяете зависимости
            1. Sender должен быть TImage.
            2. TImage должен иметь определенный Name.
            Ответить
    • Прогу доделал, если хотите, могу выложить.
      Ответить
    • Писец вы ребята загнались =) http://govnokod.ru/7345#comment99135 реально хороший, годный вариант. с ветвлением не вариант, так как снова будет в функции привязка к именам переменных (насколько я понял идею с ветвлением в данном случае). только один момент: процедуру ImageClick надо сделать членом класса и объявить ее как private, чтобе имела доступ ко всему, что нужно, а другие классы её зазря не видели
      Ответить
    • внимание, в треде анальнопорванные минусаторы
      Ответить

    Добавить комментарий