На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Почему при выводе позиции Point X выводится другое число?
    Создала точку Point с координатами (X,Y). Поместила эти координты в массив. При этом использовала функцию ScreenToClient. Позиции у меня X = 124, Y = 149. При выводе X получается -72. Почему так происходит? Я ожидала получить 124. Вот мой код:

    ExpandedWrap disabled
      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.
      Вместо
      ExpandedWrap disabled
        pts[High(pts)] := ScreenToClient(pt);

      Попробуйте
      ExpandedWrap disabled
         pts[High(pts)] := pt;
        Массив заполнен TPoint, при выводе с помощью Length я получаю 1, если High то 0. Поясните пожалуйста чем Length отличается от High?

        ExpandedWrap disabled
          pt:= Point(124,149);
          SetLength(pts, Length(pts)+1);
          pts[High(pts)] := pt;
          //Значение - 0
          ShowMessage(IntToStr(High(pts)));
          //Значение - 1
          ShowMessage(IntToStr(Length(pts)));
          ExpandedWrap disabled
            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;
          Сообщение отредактировано: RusSun -
            Индекс массива начинается с 0.
            Поэтому длина массива из одного элемента = 1 , а его наибольший индекс = 0.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0354 ]   [ 16 queries used ]   [ Generated: 27.04.24, 09:24 GMT ]