Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Delphi: Общие вопросы > Почему при выводе позиции Point X выводится другое число? |
Автор: Katerina1993 26.03.22, 11:59 |
Создала точку Point с координатами (X,Y). Поместила эти координты в массив. При этом использовала функцию ScreenToClient. Позиции у меня X = 124, Y = 149. При выводе X получается -72. Почему так происходит? Я ожидала получить 124. Вот мой код: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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. |
Автор: RusSun 26.03.22, 19:06 |
Вместо <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> pts[High(pts)] := ScreenToClient(pt); Попробуйте <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> pts[High(pts)] := pt; |
Автор: Katerina1993 27.03.22, 06:59 |
Массив заполнен TPoint, при выводе с помощью Length я получаю 1, если High то 0. Поясните пожалуйста чем Length отличается от High? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> pt:= Point(124,149); SetLength(pts, Length(pts)+1); pts[High(pts)] := pt; //Значение - 0 ShowMessage(IntToStr(High(pts))); //Значение - 1 ShowMessage(IntToStr(Length(pts))); |
Автор: RusSun 27.03.22, 08:00 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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; |
Автор: WildBear 10.04.22, 08:40 |
Индекс массива начинается с 0. Поэтому длина массива из одного элемента = 1 , а его наибольший индекс = 0. |