Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.31;
Скачать: CL | DM;

Вниз

Ищу удачный вариант участка кода программы   Найти похожие ветки 

 
nik9632 ©   (2010-08-06 20:49) [0]

Доброго времени суток, господа (товарищи, братья и сёстры :-) ).

Проблема следующая:

Есть надобность написать программку со следующей функцией:

на основной форме (Form1:TForm) располагаются компоненты: Edit1, Memo1, Memo2 и Panel1, на которой располагаются 5 компонентов Image.(от 1 до 5-го)Visible:=True, Button1, Button2, Button3; Image1:="1",Image2:="2",Image3:="3",Image4:="4",Image5:="5".

событие Butto1.OnClick (загрузить стимулы) вызывает загрузку из имеющего на винчестере txt-файла строки в Мемо1.

событие Butto2.OnClick (старт программы) вызывает построчную загрузку в Edit1 строк из Мемо1.

Когда в Еdit1 видна первая (заведомо непустая) строка из Мемо1 надо кликнуть на любых два (из пяти) Images При этом событии в Мемо2 записывается Memo2.Links.Add(Edit1.Text+"номер первого кликнутого имейджа"+"номер второго кликнутого имейджа").

После этого в Edit1 появляется следующая строка из Мемо1. Снова клики на любых два из пяти имейджа, запись в Мемо2 аналогично предыдущему абзацу.

Уровень подготовки работы в Дельфи у меня начальный. Учусь самостоятельно по вашим записям и др. книгам. Ниже привожу код того, как понимаю решение задачи. В комментариях указываю,где возникла проблема. Просьба для тех, кому не трудно и есть время и желание решить предлагаемую задачу (кстати, насколько она реально сложная, с точки зрения знающих людей?), подскажите подходы. Может вообще надо изменить алгоритм решения? Какой из видов циклов целесообразнее здесь использовать (for, while, case...)

unit Unit1_Main_Form;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, Menus, StdCtrls;

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Image1: TImage;
   Image2: TImage;
   Image3: TImage;
   Image4: TImage;
   Image5: TImage;
   Edit1: TEdit;
   Memo1: TMemo;
   Memo2: TMemo;
   Button1: TButton;
   OpenDialog1: TOpenDialog;
   SaveDialog1: TSaveDialog;
   
   procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   
   procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   
   procedure Image3MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   
   procedure Image4MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   
   procedure Image5MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   
   procedure Button1Click(Sender: TObject);
 
   procedure Image1Click(Sender: TObject);

 private
   { Private declarations }

public
   { Public declarations }
 
end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;//Отсуюа и до....
 Shift: TShiftState; X, Y: Integer);
begin
 Image1.Visible:=False;
end;

procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;//..............
 Shift: TShiftState; X, Y: Integer);
begin
  Image2.Visible:=False;
end;

procedure TForm1.Image3MouseDown(Sender: TObject; Button: TMouseButton;//.............
 Shift: TShiftState; X, Y: Integer);
begin
 Image3.Visible:=False;
end;

procedure TForm1.Image4MouseDown(Sender: TObject; Button: TMouseButton;//.............
 Shift: TShiftState; X, Y: Integer);
begin
 Image4.Visible:=False;
end;

procedure TForm1.Image5MouseDown(Sender: TObject; Button: TMouseButton;//............
 Shift: TShiftState; X, Y: Integer);
begin
  Image5.Visible:=False;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;//............
 Shift: TShiftState; X, Y: Integer);
begin
 Image1.Visible:=True;
end;

procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton;//............
 Shift: TShiftState; X, Y: Integer);
begin
 Image2.Visible:=True;
end;

procedure TForm1.Image3MouseUp(Sender: TObject; Button: TMouseButton;//............
 Shift: TShiftState; X, Y: Integer);
begin
 Image3.Visible:=True;
end;

procedure TForm1.Image4MouseUp(Sender: TObject; Button: TMouseButton;//............
 Shift: TShiftState; X, Y: Integer);
begin
 Image4.Visible:=True;
end;

procedure TForm1.Image5MouseUp(Sender: TObject; Button: TMouseButton;//..сюда процедуры декоративного характера
 Shift: TShiftState; X, Y: Integer);
begin
  Image5.Visible:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);//Загрузка стимулов в Мемо1.
begin
 if OpenDialog1.Execute=True then
   Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

procedure TForm1.Button2Click(Sender: TObject);//Сохранение из Мемо2 в файл ТХТ по окончании тестирования
begin
 SaveDialog1.InitialDir:=GetCurrentDir;
 if not SaveDialog1.Execute then ShowMessage("Файл не сохранён")
   else //Сохранение файла
 Memo2.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.Button2Click(Sender: TObject);

var j :Integer;//счётчик для перемещения по строкам Мемо1.

begin
 
 for j:=0 to 19 do
   
   begin
     Edit1.Text:=Memo1.Lines[j];
   end;

     begin
       if Image1.OnClick then  Memo2.Lines.Add(Edit1.Text+"1");// Этот код должен был бы выполнять основную функцию, но
if Image2.OnClick then  Memo2.Lines.Add(Edit1.Text+"2");// он не работает. Это есть проблема: как написать, чтобы
       if Image3.OnClick then  Memo2.Lines.Add(Edit1.Text+"3");// нечто подобное работало.
       if Image4.OnClick then  Memo2.Lines.Add(Edit1.Text+"4");// Подразумевается, что эта часть цикла обеспечивает
       if Image5.OnClick then  Memo2.Lines.Add(Edit1.Text+"5");// событие Мемо2.Links.Add(Edit1.Text+"№_Image")
       Continue;// или здесь надо использовать break?
     end;

     begin
       if Image1.OnClick then  Memo2.Lines.Add(Edit1.Text+"1");// Эта часть цикла добавляет цифру имейджа, который
if Image2.OnClick then  Memo2.Lines.Add(Edit1.Text+"2");// для слова из Эдита1 нажат вторым и обеспечивает
       if Image3.OnClick then  Memo2.Lines.Add(Edit1.Text+"3");//
       if Image4.OnClick then  Memo2.Lines.Add(Edit1.Text+"4");//
       if Image5.OnClick then  Memo2.Lines.Add(Edit1.Text+"5");// событие к Мемо2.Links.Add(Edit1.Text+"№_Image")
       Continue;// или здесь надо использовать break?          // добавляется +"№_Image" так, чтобы в итоге было
     end;
       // Мемо2.Links.Add(Edit1.Text+"№_Image"+"№_Image");
     Здесь-переход к новуму шагу цикла.

end;

end.

Попутно, видимо, уместны вопросы как делать паузу в выполнении цикла? Может быть целесообразнее использовать вместо Мемо ListBox или ComboBox?

Благодарю за проявленное внимание. Жду обратной связи на данном сайте или на E-mail: nik9632@yandex.ru

P.S.: Прочёл информация с ресурса http://www.delphimaster.ru/forums.shtml->>http://segfault.kiev.ua/smart-questions-ru.html
позиция ясна и принимаема. Если мой вопрос подпадает под категорию "lusers", то хотя бы локализуйте, где именно дано похожее решение.


 
KilkennyCat ©   (2010-08-06 21:47) [1]

ненадо писать так много одинаковых обработчиков
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;//Отсуюа и до....
Shift: TShiftState; X, Y: Integer);
begin
Image1.Visible:=False;
end;

procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;//..............
Shift: TShiftState; X, Y: Integer);
begin
 Image2.Visible:=False;
end;

и т.д.
сводятся к одному

TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
findcomponent("Image" + inttostr((sender as tcomponent).tag)).Visible:=False;
end;

обрабочик назначается всем имаджам. кроме того, cвойству tag каждого имаджа присваивается номер.
Но это тоже, так, для справки, чтоб было видно, как можно оперировать и чем.
на самом деле, тут все сведется к

TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;//Отсуюа и до....
Shift: TShiftState; X, Y: Integer);
begin
TImage(sender).Visible:=False;
end;


 
KilkennyCat ©   (2010-08-06 21:51) [2]


>  if Image1.OnClick

что здесь имеется ввиду? проверка клика? это бред, тем более, что его проверяли уже.

итого:

TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;//Отсуюа и до....
Shift: TShiftState; X, Y: Integer);
begin
TImage(sender).Visible:=False;
Memo2.Lines.Add(Edit1.Text+inttostr((sender as tcomponent).tag));
end;


 
Игорь Шевченко ©   (2010-08-06 22:12) [3]


> сводятся к одному
>
> TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
>
> Shift: TShiftState; X, Y: Integer);
> begin
> findcomponent("Image" + inttostr((sender as tcomponent).
> tag)).Visible:=False;
> end;


сводятся к одному

procedure TForm1.Image3MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
(Sender as TImage).Visible:=True;
end;


 
nik9632 ©   (2010-08-06 22:31) [4]

Ответившим моя благодарность


 
Dennis I. Komarov ©   (2010-08-09 17:59) [5]


>  if OpenDialog1.Execute=True then


 
KilkennyCat ©   (2010-08-10 00:25) [6]


> Dennis I. Komarov ©   (09.08.10 17:59) [5]

ну что ты хочешь, период неосознаного... ниже сэйв уже в норме ;)



Страницы: 1 вся ветка

Текущий архив: 2010.10.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
2-1280958303
Ярослав
2010-08-05 01:45
2010.10.31
D2010 и ресурсы


6-1228479138
dmitry_12_08_73
2008-12-05 15:12
2010.10.31
Ограничения на объём передаваемого файла с помощью TIdHTTP


2-1281008416
Irisss
2010-08-05 15:40
2010.10.31
Две панели в TaskBar


2-1280927589
mylasthit
2010-08-04 17:13
2010.10.31
Подмогите с выбором компонента...


8-1207328480
Alexus
2008-04-04 21:01
2010.10.31
Работа с графиком