Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Борьба с одинаковыми кусками кода


Автор: Dende-Soft 11.2.2008, 10:40
Такой глупый вопрос.
У меня в программе - 80% кода - одинаковый, различающийся всего одной строкой.

Код

повторяющийся код
sl.Lines.Add('варпарр'); / та "особенная строка"


Как можно это упростить, не утяжеляя программу тысячей одинаковых строк?

Автор: kemiisto 11.2.2008, 10:52
Повторяющийся кусок кода нужно оформить в виде процедуры или функции и вызывать ее в необходимых местах.

Автор: pukin 11.2.2008, 10:54
Цитата(Dende-Soft @ 11.2.2008,  10:40)
Такой глупый вопрос.
У меня в программе - 80% кода - одинаковый, различающийся всего одной строкой.

Код

повторяющийся код
sl.Lines.Add('варпарр'); / та "особенная строка"


Как можно это упростить, не утяжеляя программу тысячей одинаковых строк?

А можно глянуть каике данные ты добавляешь в sl? Покажи немного кода, а то мало данных, чтобы понять как именно тебе это упростить.

Можно было бы написать процедурку и передавать ей твой текст, который надо добавить в sl, но мало ли, может можно передавать сразу кучу значений, которые процедурка должна добавить в sl. Зависит от того, что ты туда пихаешь. smile


Если я правильно понял - то sl у тебя VCLTMemo..
Пример процедурки:

Код

procedure AddToMemo(Memo: TMemo; AddText: AnsiString); // А ведь можно сделать так, чтобы сюда добавлялся массив текста, а не кусочек. :)
begin
  Memo.Lines.Add(AddText)
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
begin
  for i:=0 to 20 do AddToMemo(Form1.sl,'варпарр');
end;


 smile 

Автор: Dende-Soft 11.2.2008, 11:10

Цитата

Если я правильно понял - то sl у тебя VCL: TMemo..


Это не мемо, а синедит, тоесть разницы практически нет.

Вот сам кусок кода
Код


var
Sl:Tsynedit;
i:integer;
begin
i:=PageControl2.ActivePageIndex;
with PageControl2 do
if ActivePage.Controls[0] is Tsynedit then  begin
Sl:=Tsynedit(Pages[i].Controls[0]);
sl.Lines.Add('варпарр');

Автор: pukin 11.2.2008, 15:15
Цитата(Dende-Soft @ 11.2.2008,  11:10)
Цитата

Если я правильно понял - то sl у тебя VCL: TMemo..


Это не мемо, а синедит, тоесть разницы практически нет.

Вот сам кусок кода
Код


var
Sl:Tsynedit;
i:integer;
begin
i:=PageControl2.ActivePageIndex;
with PageControl2 do
if ActivePage.Controls[0] is Tsynedit then  begin
Sl:=Tsynedit(Pages[i].Controls[0]);
sl.Lines.Add('варпарр');

Дык, засунь этот код в отдельную процедуру и вызывай её одной строчкой...

Код

procedure AddToMemo(AddText: AnsiString); // А ведь можно сделать так, чтобы сюда добавлялся массив текста, а не кусочек. :)
var
   sl: TSynEdit;
   i : Integer;
begin
   i:=Form1.PageControl2.ActivePageIndex;
   if Form1.PageControl2.ActivePage.Controls[0] is TSynEdit then
      begin
    sl := TSynEedit(Form1.PageControl2.Pages[i].Controls[0]);
    sl.Lines.Add(AddText);
      end;
end;

AddToMemo('варпарр');


Или я чего-то недопонимаю?  smile 

Автор: Dende-Soft 11.2.2008, 15:58
Цитата

Или я чего-то недопонимаю?

Это я просто туго в делфи соображаю.
Всем спасибо!

Автор: pukin 11.2.2008, 16:33
Цитата(Dende-Soft @ 11.2.2008,  15:58)
Цитата

Или я чего-то недопонимаю?

Это я просто туго в делфи соображаю.
Всем спасибо!

Пожалуйстаsmile

Незабудь отметить, что решено.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)