Форум: "Начинающим";
Текущий архив: 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