![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте! Помогите пожалуйста написать прогу.
Есть список продуктов, при нажатии на нужные продукты, эти продукты должны показываться в другом(чистом) списке и при нажтии на кнопку снизу этого списка должна выходить форма, где находиться блюдо котор.можно приготовить с помощью этих продуктов. ![]() |
|
#2
|
|||
|
|||
|
Делаешь список, грузишь в него все продукты. В событии OnClick переносишь выделенный элемент во второй список. При нажатии кнопки идет перебор всех блюд, при этом смотришь состав - если есть хоть одно не соответствие, значит не получится это блюдо (критерии можешь немного изменить: например, указывать то, чего не хватает или что будет лишним). Все подходящие блюда выводишь в третий список.
Думаю, что нужна БД для хранения состава блюд. P.S. Пролог с этим делом на УРА справится ![]() |
|
#3
|
||||
|
||||
|
на форме 2 лист бокса и 3 конки и как-то так:
p.s. Фантазия у меня конечно больная ![]() Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
s:=ListBox1.Items[ListBox1.ItemIndex];
if ListBox2.Items.IndexOf(s)<0 then
begin
ListBox2.Items.add(s);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox2.Items.Delete(ListBox2.ItemIndex);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
memo1.Clear;
if (pos('Водка',ListBox2.Items.Text)>0 )
and (pos('Пиво',ListBox2.Items.Text)>0 )
then
memo1.Lines.Add('ЕРЖЖЖЖЬЬЬЬ');
if (pos('Водка',ListBox2.Items.Text)>0 )
and (pos('Шампанское',ListBox2.Items.Text)>0 )
then
memo1.Lines.Add('СЕверноЕ сияНие!!');
if memo1.Lines.Text='' then memo1.Lines.Add('ХЗ что это такое :)');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.items.add('Пиво');
ListBox1.items.add('Водка');
ListBox1.items.add('Вино');
ListBox1.items.add('Коньяк');
ListBox1.items.add('Мартини');
ListBox1.items.add('Виски');
ListBox1.items.add('Шампанское');
memo1.Clear;
end;
end. |
| Этот пользователь сказал Спасибо friz за это полезное сообщение: | ||
Дикоша (18.04.2012)
| ||
|
#4
|
|||
|
|||
|
-все правильно..но мне надо как то так. но здесь кажется какая та ошибка? message вместе с формой открывается..(
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
memo1.Clear;
if (pos('Водка',ListBox2.Items.Text)>0 )
and (pos('Пиво',ListBox2.Items.Text)>0 )
then form2.show ;
if (pos('Водка',ListBox2.Items.Text)>0 )
and (pos('Шампанское',ListBox2.Items.Text)>0 )
then form3.show
else showMessage('Не хватает ингредиентов или нет такого блюда');
end;Последний раз редактировалось Admin, 19.04.2012 в 20:26. |
|
#5
|
|||
|
|||
|
Видимо, у тебя есть ВОДКА и ПИВО, а ШАМПАНСКОГО нет, поэтому срабатывает первое условие (форма открывается), и else второго условия (сообщение). Тебе надо из функции выходить после первого же истиннгого условия.
|
|
#6
|
|||
|
|||
|
ууппсс это как? я новичок...и не так уж разбираюсь...)
|
|
#7
|
||||
|
||||
|
так примерно
Код:
procedure TForm1.Button3Click(Sender: TObject);
var nomerRecepta:integer;
begin
memo1.Clear;
nomerRecepta:=0;
if (pos('Водка',ListBox2.Items.Text)>0 )
and (pos('Пиво',ListBox2.Items.Text)>0 )
then nomerRecepta:=1 ;
if (pos('Водка',ListBox2.Items.Text)>0 )
and (pos('Шампанское',ListBox2.Items.Text)>0 )
then nomerRecepta:=2 ;
case nomerRecepta of
1:form2.show;
2:form3.show;
else showMessage('Не хватает ингредиентов или нет такого блюда');
end;
end; |
|
#8
|
|||
|
|||
|
нет все равно если там водка, пиво и коньяк то все равно форму2 открывает.а мне надо чтобы в этом случаи ошибку показывало...
|
|
#9
|
|||
|
|||
|
Мало проверить наличие необходимых элементов, нужно еще и не забыть про исключение ненужных (в примере Коньяк исключается)
Код:
if (pos('Водка',ListBox2.Items.Text)>0 )
and (pos('Пиво',ListBox2.Items.Text)>0 )
and (pos('Коньяк',ListBox2.Items.Text)=0)
then nomerRecepta:=1 ;
if (pos('Водка',ListBox2.Items.Text)>0 )
and (pos('Шампанское',ListBox2.Items.Text)>0 )
and (pos('Коньяк',ListBox2.Items.Text)=0)
then nomerRecepta:=2 ; |
|
#10
|
|||
|
|||
|
Спасибооооо все выходит!
![]() |
|
#11
|
|||
|
|||
|
Цитата:
|