Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.216.229] |
|
Сообщ.
#1
,
|
|
|
Создала точку Point с координатами (X,Y). Поместила эти координты в массив. При этом использовала функцию ScreenToClient. Позиции у меня X = 124, Y = 149. При выводе X получается -72. Почему так происходит? Я ожидала получить 124. Вот мой код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; pts:Array of TPoint; pt:TPoint; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin pt:= Point(124,149); SetLength(pts, Length(pts)+1); pts[High(pts)] := ScreenToClient(pt); Label1.Caption := IntToStr(pts[High(pts)].X); ShowMessage(IntToStr(pts[High(pts)].X)); end; end. |
Сообщ.
#2
,
|
|
|
Вместо
pts[High(pts)] := ScreenToClient(pt); Попробуйте pts[High(pts)] := pt; |
Сообщ.
#3
,
|
|
|
Массив заполнен TPoint, при выводе с помощью Length я получаю 1, если High то 0. Поясните пожалуйста чем Length отличается от High?
pt:= Point(124,149); SetLength(pts, Length(pts)+1); pts[High(pts)] := pt; //Значение - 0 ShowMessage(IntToStr(High(pts))); //Значение - 1 ShowMessage(IntToStr(Length(pts))); |
Сообщ.
#4
,
|
|
|
procedure TForm1.Button1Click(Sender: TObject); begin pt:= Point(124,149); showmessage('Длина динамического массива '+intToStr( Length(pts))+#10#13+ 'Индексы в динамическом массиве начинаются с «0» ' ); SetLength(pts, Length(pts)+1); // showmessage('длина массива '+intToStr( Length(pts)) ); pts[High(pts)] := pt; //ScreenToClient( ) pt:= Point(194,124); SetLength(pts, Length(pts)+1); pts[High(pts)] := pt; pt:= Point(146,124); SetLength(pts, Length(pts)+1); pts[High(pts)] := pt; //showmessage('Длина массива '+intToStr( Length(pts)) ); Label1.Caption := IntToStr(pts[High(pts)].X); ShowMessage(IntToStr(pts[High(pts)].X)); showmessage('Длина массива после добавления 3 значений в массив '+intToStr( Length(pts)) ); Label1.Caption := IntToStr(pts[High(pts)].X); ShowMessage('Значение по «наименьшему индексу в массиве» '+#10#13+ IntToStr(pts[Low(pts)].X)+#10#13+ 'Его индекс в массиве '+#10#13+ IntToStr(Low(pts)) ); ShowMessage('Значение по «наибольшему индексу в массиве» '+#10#13+ IntToStr(pts[High(pts)].X)+#10#13+ 'Его индекс в массиве '+#10#13+ IntToStr(High(pts)) ); end; |
Сообщ.
#5
,
|
|
|
Индекс массива начинается с 0.
Поэтому длина массива из одного элемента = 1 , а его наибольший индекс = 0. |