Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
ВнизЕсть кусок кода, как оптимизировать, что не так, где дурной тон? Найти похожие ветки
← →
Starcom (2005-08-04 12:36) [0]Привет Мастера!
Есть кусок кода, как оптимизировать, что не так, где дурной тон?
>>>
procedure TForm1.Button1Click(Sender: TObject);
const
Imp = ".\Doc\import.rtf";
Otech = ".\Doc\otech.rtf";
TelRtel = ".\Doc\telrtel.rtf";
VidMagCam = ".\Doc\vidmagcam.rtf";
AutoMagCd = ".\Doc\automagcd.rtf";
begin
if RadioButton1.Checked = True then Form2.Show;
Form2.RxRichEdit1.PlainText := False;
Form2.RxRichEdit1.Lines.LoadFromFile(Imp);
if RadioButton2.Checked = True then Form3.Show;
Form3.RxRichEdit1.PlainText := False;
Form3.RxRichEdit1.Lines.LoadFromFile(Otech);
if RadioButton3.Checked = True then Form4.Show;
Form4.RxRichEdit1.PlainText := False;
Form4.RxRichEdit1.Lines.LoadFromFile(TelRtel);
if RadioButton4.Checked = True then Form5.Show;
Form5.RxRichEdit1.PlainText := False;
Form5.RxRichEdit1.Lines.LoadFromFile(VidMagCam);
if RadioButton5.Checked = True then Form6.Show;
Form6.RxRichEdit1.PlainText := False;
Form6.RxRichEdit1.Lines.LoadFromFile(AutoMagCd);
Form1.Hide;
end;
<<<
С Уважением Starcom! ;-()
← →
ЮЮ © (2005-08-04 12:41) [1]Пять форм вместо одной?
И на тех формах такте же Magic Buttons? Круто!
← →
ЮЮ © (2005-08-04 12:44) [2]Пять форм вместо одной?
И на тех формах такие же Magic Buttons? Круто!
Imp, Otech и т.д. замени на FileName2, FileName3 - тогда всё будет выдержанно в одном стиле, да и "расширяться" проще будет :)
А оптимизировать тут нечего, если медленно пашет - здесь не убыстрить :(
← →
Fay © (2005-08-04 12:45) [3]2 Starcom (04.08.05 12:36)
1) Первое впечатление - "бредятина".
2) ВместоLoadFromFile(".\Doc\automagcd.rtf");
пиши полный путь.
← →
Digitman © (2005-08-04 12:48) [4]
> где дурной тон?
везде.
однотипные операции прямо таки напрашиваются на то чтобы их поместили в цикл ... отсюда напрашивается и массив имен файлов вместо индивидуальных деклараций стр.значений
← →
Fynjy1984 © (2005-08-04 12:53) [5]2 Starcom (04.08.05 12:36)
1)Поясните, что должна делать процедура?
2)
> Form2.RxRichEdit1.PlainText := False;
> Form2.RxRichEdit1.Lines.LoadFromFile(Imp);
Эти строки должны выполнятся вне зависимости от выполнения условия?
← →
Zeqfreed © (2005-08-04 13:13) [6]Starcom (04.08.05 12:36)
Стандартные имя процедуры и имена компонентов тоже дурной тон.
Уславияif BooleanFlag = True then
заменяются наif BooleanFlag then
← →
pasha_golub © (2005-08-04 13:29) [7]Однако можно создать один класс формы, в конструкторе коей передавать имя файла для загрузки.
А, вообще, надо бы очерить предметную область. Чего хочет сделать программа, может быть вообще нафиг не надо куча экземпляров форм, может быть достаточно одной. Только с закладками, а может и вообще закладок нафиг не надо.
← →
Starcom (2005-08-04 13:36) [8]1) Без проблем, можно и на одной форме.
2) Имена файлов О"кей.
3) Form2.RxRichEdit1.PlainText := False; енто нафиг,организовать
в свойствах компонента.
4) Просто если файлы большие, и в OnCreate каждой из
форм выполняю LoadFromFile(...), то приложение тупит вначале,
т.е Форма выбора раздела отображается не полностью, вот почему
процедура выполнена в ней (Быстрая загрузка Основной формы, но
медленная в остальных) Я не силён в терминологии!
С Уважением Starcom! 8)
← →
Alex Konshin © (2005-08-04 14:00) [9]А зачем при загрузке приложения создавать все формы?
← →
Digitman © (2005-08-04 14:01) [10]
> если файлы большие.. то приложение тупит вначале
вынеси загрузку в доп.трэд
при загрузке делай свой RichEdit (или форму, которой он принадлежит) невидимым.
по окончанию загрузки пусть доп.тред известит осн.тред об этом факте, с тем чтобы осн.тред знал когда можно сделать беспроблемное Visible = True
← →
Fay © (2005-08-04 14:13) [11]2 Digitman © (04.08.05 14:01) [10]
Странный способ...
[9] понятнее...
← →
Digitman © (2005-08-04 14:19) [12]
> Fay © (04.08.05 14:13) [11]
> Странный способ...
но вполне имеющий право на жизнь в ряде случаев ...
← →
Starcom (2005-08-04 14:28) [13]Digitman © (04.08.05 14:01) [10]
(или форму, которой он принадлежит) невидимым.
Так и делаю: Просто при загрузке в RichEdit, rtf файла
идёт подвисание на 2-3 сек!
← →
Digitman © (2005-08-04 14:44) [14]
> Так и делаю
ЧТО делаешь ?!
я тебе - о доп.трэдах, понимаешь ли, долдоню тут) ... коих в твоем алгоритме, судя по приведенному коду, и в помине нет ...
← →
REA (2005-08-04 15:36) [15]>TForm1.Button1Click
дурной тон
← →
Джо © (2005-08-04 16:01) [16]Вот такой образец уже смотрится более прилично.
Создай пустой проект с двумя формами. С Auto-create оставь только Form1!!
На первой форме: TRadioGroup с 5 строками . И кнопка, с обработчиком. И обработчик формы OnCreate.
На второй: TRichEdit и все остальное, что нужно.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FInfoPath: string;
procedure ShowInfoFrm (AIndex: Integer);
function GetInfoFileName (AIndex: Integer): string;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if RadioGroup1.ItemIndex <> -1 then
ShowInfoFrm(RadioGroup1.ItemIndex)
else
MessageDlg ("Выберите пункт",mtWarning,[MBOK],-1)
end;
function TForm1.GetInfoFileName(AIndex: Integer): string;
const
InfoFiles: array [0..4] of string =
(
"import.rtf",
"otech.rtf",
"telrtel.rtf",
"vidmagcam.rtf",
"automagcd.rtf"
);
begin
if AIndex in [Low(InfoFiles)..High(InfoFiles)] then
Result := FInfoPath + InfoFiles[AIndex]
else
raise Exception.Create("Неверный номер документа");
end;
procedure TForm1.ShowInfoFrm(AIndex: Integer);
var
Frm: TForm2;
begin
Frm := TForm2.Create(nil);
try
Screen.Cursor := crHourGlass;
try
Frm.RichEdit1.Lines.LoadFromFile(
GetInfoFileName(AIndex)
);
finally
Screen.Cursor := crDefault;
end;
Frm.ShowModal;
finally
Frm.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FInfoPath := ExtractFilePath(ParamStr(0)) + "Doc\"
end;
end.
Все, что нужно будет править впоследствии, это массив-константа строк, указывающих на имена документов InfoFiles и добавить строк в TRadioGroup.
Пока документ не загрузится в TRichEdit, форма не покажется, просто будут висеть часики. Выглядит получше.
← →
Джо © (2005-08-04 16:31) [17]Можно сделать еще универсальней.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ReadDatabase (const AFileName: string;
ACaptions,AInfoFiles: TStrings);
procedure FormDestroy(Sender: TObject);
private
FInfoPath: string;
FInfoFiles: TStrings;
procedure ShowInfoFrm (AIndex: Integer);
function GetInfoFileName (AIndex: Integer): string;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if RadioGroup1.ItemIndex <> -1 then
ShowInfoFrm(RadioGroup1.ItemIndex)
else
MessageDlg ("Выберите пункт",mtWarning,[MBOK],-1)
end;
function TForm1.GetInfoFileName(AIndex: Integer): string;
begin
if AIndex <= FInfoFiles.Count then
Result := FInfoPath + FInfoFiles[AIndex]
else
raise Exception.Create("Неверный номер документа");
end;
procedure TForm1.ShowInfoFrm(AIndex: Integer);
var
Frm: TForm2;
begin
Frm := TForm2.Create(nil);
try
Screen.Cursor := crHourGlass;
try
Frm.RichEdit1.Lines.LoadFromFile(
GetInfoFileName(AIndex)
);
finally
Screen.Cursor := crDefault;
end;
Frm.ShowModal;
finally
Frm.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FInfoFiles := TStringList.Create;
FInfoPath := ExtractFilePath(ParamStr(0)) + "Doc\";
ReadDatabase (ExtractFilePath(ParamStr(0))+"data.csv",
RadioGroup1.Items,
FInfoFiles);
end;
procedure TForm1.ReadDatabase(const AFileName: string;
ACaptions,AInfoFiles: TStrings);
procedure SplitString (const ASource: string; var ACaption,AInfoFile: string);
const
Delimiter: Char = ";";
var
N: Integer;
begin
ACaption := "";
AInfoFile := "";
N := Pos (Delimiter,ASource);
ACaption := Copy (ASource,1,N-1);
AInfoFile := Copy (ASource,N+1,Length(ASource));
end;
var
Lst: TStrings;
I: Integer;
ACaption,
AInfoFile: string;
begin
ACaptions.Clear;
AInfoFiles.Clear;
Lst := TStringList.Create;
try
Lst.LoadFromFile(AFileName);
for I := 0 to Lst.Count-1 do
begin
SplitString(Lst[I],ACaption,AInfoFile);
ACaptions.Add(ACaption);
AInfoFiles.Add(AInfoFile);
end;
finally
Lst.Free;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FInfoFiles.Free;
end;
end.
В папке с программой должен находиться файл data.csv образца:
Импорт;import.rtf
Отех;otech.rtf
Телртел;telrtel.rtf
Видмагкам;vidmagcam.rtf
АвтомагКД;automagcd.rtf
Этот файл читается при старте программы, в зависимости от его содержимого настраивается TRadioGrouop с пунктами выбора.
В данном случае, для того, чтобы добавить новые пункты в программу, вообще ничего в ней править не придется. Достаточно внести изменения в файл данных. Который, кстати говоря, очень удобно обрабатывать в Excel.
← →
Starcom (2005-08-04 21:10) [18]Привет Мастера!
Всем Огромное спасибо! Особенно Джо © (04.08.05 16:31) [17]
Мне очень понравилось. Правда!!!
Вразумили чут-чуть!
Как говорится, далеко мне ещё до Вас... парни!
Но я надеюсь, может что нибудь с меня получится.
Но простите за нескромность, мне на Form2 нужна
ещё одна Button2, для возврата в Form1, для нового
выбора, пишу так ... но при OnClick ничего не происходит!
...
procedure TForm2.Button2Click(Sender: TObject);
begin
Form1.Visible :=True;
Form2.Visible :=False;
end;
...
Есть соображения!
С Уважением Starcom! ;-()
← →
Джо © (2005-08-04 21:17) [19]Если тебе нужно просто закрыть вторую форму, то в TForm2.Button2Click напиши Close;
← →
Starcom (2005-08-04 21:32) [20]Джо © (04.08.05 21:17) [19]
Я с вами совсем обленился! типо сам бы не допёр!
К хорошему быстро привыкаеш!!! :)
← →
Defunct © (2005-08-05 08:05) [21]Джо © (04.08.05 21:17) [19]
Поставить кнопке свойство ModalResult := mrOk
и модальная форма будет сама закрываться.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.038 c