![]() |
|
#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. Последний раз редактировалось Admin, Сегодня в 10:32. |
Этот пользователь сказал Спасибо 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; Последний раз редактировалось Admin, Сегодня в 10:32. |
#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
|
|||
|
|||
![]() Цитата:
|