Cześć.
Mam prawie ze identyczne procedury, tylko każda pod innym zdarzeniem
Różnią się nie znacznie Pod MouseUp i Down zmienia się tylko odpowiednio obrazek buttona. Pod OnClick Buttona wyświetla się cała reszta. Jak powinna wyglądać ogólna metoda w tym wypadku? Wyczytałam też ze jest coś takiego "Refactor > Extract method" ale nie bardzo wiem jak tego użyć, czytałam dokumentację nie bardzo z niej coś rozumiem i nawet nie wiem czy w tym wypadku to jest jakieś rozwiązanie.

procedure TForm1.btnImgTranslatorMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if assigned(self.idictionary) then
  begin
      if ClientDataSet1.RecNo = 1 then
      Begin
        ClientDataSet1.Next;      
        LoadImage(self.exePath + '\' + self.ClientDataSet1.FieldByName
          ('ButtonClick').AsString, self.btnImgTranslator);
        ClientDataSet1.Prior;
      end;

      if ClientDataSet1.RecNo = 2 then
      begin
        ClientDataSet1.Prior;
        LoadImage(self.exePath + '\' + self.ClientDataSet1.FieldByName
          ('ButtonClick').AsString, self.btnImgTranslator);
        ClientDataSet1.Next;
      end;
    end;
  end;


procedure TForm1.btnImgTranslatorMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if assigned(self.idictionary) then
  begin
    if ClientDataSet1.RecNo = 1 then
    begin
      ClientDataSet1.Next;
      LoadImage(self.exePath + '\' + self.ClientDataSet1.FieldByName
        ('ButtonNormal').AsString, self.btnImgTranslator);
      ClientDataSet1.Prior;
    end;

    if ClientDataSet1.RecNo = 2 then
    begin
      ClientDataSet1.Prior;
      LoadImage(self.exePath + '\' + self.ClientDataSet1.FieldByName
        ('ButtonNormal').AsString, self.btnImgTranslator);
      ClientDataSet1.Next;
    end;
  end;
end;

procedure TForm1.btnImgTranslatorClick(Sender: TObject);
begin
  if assigned(self.idictionary) then
  begin
    if ClientDataSet1.RecNo = 1 then
    begin
      ClientDataSet1.Next;
      Display();
      ClientDataSet1.Prior;
    end;

    if ClientDataSet1.RecNo = 2 then
    begin
      ClientDataSet1.Prior;
      Display();
      ClientDataSet1.Next;
    end;
  end;
end;