Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1279744174
Юрий
2010-07-22 00:29
2010.10.31
С днем рождения ! 22 июля 2010 четверг


8-1207394736
altaris
2008-04-05 15:25
2010.10.31
Редактор GIMP


6-1228160302
uw
2008-12-01 22:38
2010.10.31
Подключение через VMware Network Adapter


15-1279359785
Knight
2010-07-17 13:43
2010.10.31
Как организовать внутренее взаимодействие в сетевом приложении?


2-1280992809
бумбум
2010-08-05 11:20
2010.10.31
как правильно сделать условие "или" в SQL запросе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский