Страница 1 из 1
соответствие
Добавлено: 23 дек 2009, 21:39
ENERGY
суть программы такова:
тест. есть картинка с изображением мускулатуры на пол окна и есть цифры ( 1 до 23 ), с названиями мышц.
надо что б накладывались цифры на мишци и при правильном соответствии засчитовало правильный ответ
передвижение обьектов я зделал но вот вопрос в том как зделать так что б, допустим Лэйбл1, должен был прикреплятся в конкретному месту, и при прикреплении засчитовало
хелп

Re: соответствие
Добавлено: 24 дек 2009, 09:35
Хыиуду
Ставим каждой метке тег, равный ее номеру (чтобы не пришлось вытаскивать номер из имени метки).
Создаем картинку-маску. На ней вся мышца №1 закрашена цветом, скажем, rgb(1,0,0), мышца №2 - rgb(2,0,0) и т.д. Пусть называется MaskImage.
Делаем процедуру проверки
Код: Выделить всё
for i:=0 to form1.componentsCount-1 do
if form1.components[i] is TLabel then
begin
with (Form1.Components[i] as TLabel) do
begin
x:=Left;
y:=Top;
num:=Tag;
end;
if MaskImage.Pixels[x,y]=rgb(num, 0,0)
then showmessage('Метка '+inttostr(num)+' размещена корректно!');
end;
Re: соответствие
Добавлено: 24 дек 2009, 19:51
ENERGY
Хыиуду писал(а):Ставим каждой метке тег, равный ее номеру (чтобы не пришлось вытаскивать номер из имени метки).
Создаем картинку-маску. На ней вся мышца №1 закрашена цветом, скажем, rgb(1,0,0), мышца №2 - rgb(2,0,0) и т.д. Пусть называется MaskImage.
Делаем процедуру проверки
а теперь пожалуйста с разжовыванием как для идиота
1) как поставить тег
2) как создать картинку-маску
Re: соответствие
Добавлено: 25 дек 2009, 10:01
Хыиуду
1. В диспетчере объектов у каждого визуального компонента есть параметр Tag.
2. Судя по всему, ручками в Пейнте, иного пути не вижу.
Re: соответствие
Добавлено: 25 дек 2009, 15:16
ENERGY
её можно будет сделать прозрачной?
Re: соответствие
Добавлено: 25 дек 2009, 17:16
ENERGY
м... чёт не могу понять... ну розресовал я картинку в красный (1) и синий (2) зоны. чё дальше... и, наверно по той же причине, дэлфи матюкается тут:
if MaskImage.Pixels[x,y]=rgb(num, 0,0)
после Pixels пишет: for loop control variable must be simple local variable

Re: соответствие
Добавлено: 28 дек 2009, 13:03
Хыиуду
Нет, конечно!
Во-первых, ты для цикла, похоже, используешь не ту переменную индекса, которую надо.
А во-вторых, раз уж ты создал синюю и красную зоны - делай массив colors, типа: 1 => clRed, 2 => clBlue и т.д.
А проверку MaskImage.Pixels[x,y]=rgb(num, 0,0) заменяй на MaskImage.Pixels[x,y]=colors[num].
Вообще, код сюда - посмотрим, в чем ошибка.
Re: соответствие
Добавлено: 29 дек 2009, 17:01
ENERGY
Код: Выделить всё
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, jpeg;
type
TForm1 = class(TForm)
Panel1: TPanel;
Shape1: TShape;
Shape2: TShape;
Image1: TImage;
Shape3: TShape;
Shape4: TShape;
BitBtn1: TBitBtn;
maskimage: TImage;
procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x,y,Pixels,num: real;
x1,i,y1:integer;
flag:boolean=False; implementation
{$R *.dfm}
procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
flag:=False;
end;
procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Flag then with TShape (sender) do begin Left:=Left+x-x1;Top:=Top+y-y1;
end;
end;
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x1:=x;y1:=y; flag:=True;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
for i:=0 to form1.componentCount-1 do
if form1.components[i] is TLabel then
begin
with (Form1.Components[i] as TLabel) do
begin
x:=Left;
y:=Top;
num:=Tag;
end;
if MaskImage.Pixels[x,y]=rgb(num,0,0)
then showmessage('Метка '+inttostr(num)+' размещена корректно!');
end;
end;
end.

Re: соответствие
Добавлено: 30 дек 2009, 10:54
Хыиуду
if MaskImage.Pixels[x,y]=rgb(num,0,0)
then showmessage('Метка '+inttostr(num)+' размещена корректно!');
Внеси это внутрь цикла. И если уж ты решил оставить эту проверку - то первый цвет должен иметь цвет rgb(1,0,0), второй - rgb(2,0,0) и т.д. Это. конечно, неоптимально (для глаза все эти цвета визуально будут почти черными с красноватым отливом). Так что второй вариант, который я предложил постом выше, всяко лучше.