OnKeyDown F10..12

uses System.Windows.Forms, GraphABC;
//
procedure DownKey(ch: integer);begin
Write(ch,’ ‘,ChrAnsi(ch),’ *** '); if (ch = 27) then Halt;
end;
begin
OnKeyDown:= DownKey;
while (1=1) do begin
Sleep(40);
end;
end.
Нажатия F1…F9 нормально, F10…F12 срабатывают через “пень-колоду”

Используйте принципы Markdown чтобы вставлять код

```
код
```

По теме - попробуйте после одного нажатия любой из F10…F12 - нажать стрелку вниз. Это винда делает, а не GraphABC…

Впрочем .Net позволяет это отключить, если напрямую использовать оригинальный обработчик:

uses GraphABC;

procedure DownKey(ch: integer);
begin
  Write(ch, ' ', ChrAnsi(ch), ' *** ');
  if (ch = 27) then Halt;
end;

begin
  MainForm.KeyDown += (o,e)->
  begin
//    DownKey(Ord(e.KeyCode));
    
    if e.KeyCode = System.Windows.Forms.Keys.Escape then
      MainForm.Close;
    
    $'{e.KeyCode} ({Ord(e.KeyCode)}): {e.Modifiers}'.Println;
    
    e.Handled := true; // Говорим дальше не пытаться обрабатывать
  end;
end.

Спасибо за подсказку!!

Прилагаю исходник. Много мусора - не для критики…

В левом нижнем углу записи численных значениях координат и записи “что есть что” выведены на экран: во первых наоборот и с права на лево…

Раньше применял стандартные координаты. А этот фокус - с применением Coordinate.SetMathematic; и SetCoordinateOrigin(0+2,1009-2); - из левого нижнего RecBin.pas (4,4 КБ)

Прошу помочь.

Оксакалы - молчат. Пока что…

А тем временем, я продолжаю изучать вопрос.

Прилагаю исходник, маленькая программа для уяснения: что и как работает. Пока что, при переводе в математические координаты, точно что приводит к невозможности поставить контрольное чтение переменных величин.

Я обратил внимание на терминологию переписки участников форума об исходных процедурах и функциях из Borland Pascal. Если говорить об удобстве выполнения расчетов по любой дисциплине обучения в институте, то рано или поздно, у ученика возникает потребность выяснения - глядя на зигзаг кривой, возникает вопрос, а куда это она загибается… какие данные имеют численные значения по ходу исполнения программы ??

Мы все учились когда то… так и пишу: был способ временно остановить программу - а не прекратить работу программы, путем исполнения программы по частям с переводом курсора или чтением TexOut() … получить численные значения переменной…, Этот способ назывался Ch=ReadKey - и никаких подробностей.

К сожалению - это я так понял, что в настоящее время такой способ уходит куда то в параллельный мир Юзерсов PascalABCnet… от куда вернуться обратно не получается.

Итого, 2 вопроса:

  1. Вернуть в PascalABCnet Ch=ReadKey - очень многие студенты скажут спасибо тов. Осипов!!! и тов. Test1.pas (1,7 КБ) модераторам форума!!

  2. Или ПОЖАЛУЙСТА, покажите мне аналог с примером. Вычисления в OnMouseDown:=MouseDown; OnMouseUp:=MouseUp; потому что установка переменны в теле Mouse (или KeyDown, по описанным переменным в головной процедуре (программе) - что-то не очень хорошо получается … очень многие студенты скажут спасибо тов. Осипов!!! и тов. модераторам форума!!

ИТОГО: в описании СПРАВКА: “Класс GraphABCCoordinate графического окна”, описание “Свойства класса GraphABCCoordinate”, в равной степени относятся к “Методы класса GraphABCCoordinate”, где записано:

procedure SetMathematic; Устанавливает правую систему координат (ось OY направлена вверх, ось OX - вправо) procedure SetStandard; Устанавливает левую систему координат (ось OY направлена вниз, ось OX - вправо).

получается, что … при установке Сoordinate.SetMathematic; работа CoordinateOrigin (0,0); и Coordinate.SetOrigin(0,0); - одинакова.

А именно: property OriginX: integer; X-координата начала координат относительно левого верхнего угла окна property OriginY: integer; Y-координата начала координат относительно левого верхнего угла окна, ЧИТАЕМ еще раз: относительно левого верхнего угла окна

и вся графика уходит вверх за пределы видимости…

Поэтому, вынужденно ставлю CoordinateOrigin (0,Ydelta);
Coordinate.SetOrigin(0,Ydelta);, где Ydelta - высота окна.

Тогда вся графика появляется в границах окна.

Все тоже саме, если ввести свои координаты теле программы с самого начала, так как показано

в if mb=2 then begin // xVv2 := x;
y:=(y-Ydelta)*(-1);
// yVv2 := y; SetWindowCaption(‘ПРОЕКТ. Координаты курсора X, Y от Лев.Ниж. угла: ‘+’(’+IntToStr(x)+‘, ‘+IntToStr(y)+’)’); System.Console.Beep(500,200); end;

А замысел был хороший - “переход в математические координаты из левого нижнего угла окна”.

ВСем спасибо за посильную помощь…

Звучит будто вы описываете отладку (F7/F8 и красные точки останова, который можно ставить нажимая на панеле слева), но потом идёт что то про TextOut и ReadKey - и становиться непонятно, про что вы вообще.

TextOut существует и уже даёт вам смотреть значения переменных, хоть и очень неудобно, потому что надо пере-компилировать и пере-запустить чтобы посмотреть значение какой-то другой переменной… А как ReadKey помогло бы??? Оно на паузу ставит только 1 поток выполнения в консольной программе, а не всю программу. Ну и собственно есть оно, в виде методов класса Console (ставите точку после имени этого класса на отдельной строчке и читаете).

У меня затруднение.

Type Pr = record // Next: Pointer; n: Integer; x: Integer; y: Integer; z: Integer;
// Last: Pointer; end; // record

procedure MouseDown(x,y,mb: integer);

if mb=1 then begin …

vX:=x; vY:=(y-Ydelta)*(-1); SetWindowCaption(‘ПРОЕКТ. В математической системе координат: ‘+’(’+IntToStr(vX)+‘, ‘+IntToStr(vY)+’)’);

  Coordinate.SetMathematic;  SetCoordinateOrigin(0,Ydelta);  

x1:=1640; y1:=790; x2:=1690; y2:= 830; If (vx>x1)AND(vy>y1)AND(vx<x2)AND(vy<y2) then begin…

хорошо - находит эту кнопку на экране и другие кнопки…

while (not EOF(fRec))OR(GAlfa <= 360) do begin // MyCount:=MyCount+1; NomRead:=NomRead+1; Read(fRec, Rec);

PutPixel(vX,vY, clRed);

Но, в цикле 2700 обращений… обрабатывается полностью 20%… потом происходит аппаратное прерывание… программа завершается. vN:=Rec.n; // If vN=100 Then vN:=Rec.n; vX:=Rec.x; // vY:=Rec.y; //Ycc:=Round(RvecSin(RAlfa)); vZ:=Rec.z; //Zcc:=Round(RvecCos(RAlfa)); // - для последующей записи…

Однако, если все это исполнять в основном теле программы - все работает без выбора вариантов - тех или иных кнопок на экране…

В Borland - “к гадалке не ходи”, это было понятно как.установить координаты X,Y и получить координаты X, Y - в теле программы, а не в юзере… Draph.ABC… путем обращения к перехвату x, y в обработчике MouseDown.

Иными словами, как передать значение установленное в лабиринтах юзера Graph… в Procedure MouseDown(x,y,mb: integer); для чтения в теле программы.

И вротой вопрос. КАк подвесить на переменную типа Pointer (да, Вы ввели новый ссылочный тип…) выбранный мной курсором участок изображения экрана . ВСем спасибо.

и третий вопрос. - Был “затухший” разговор про возможность получения мной материалов Вашей переписки с чиновниками по вопросу изменения рекомендованного Министерством ПО для базового обучения в школе.

И что???

Ещё раз

Отредактируйте своё сообщение для начала - потому что пока что не читабельно.