Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2015, 13:22   #51
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А можно глупый вопрос? Не уверен что его не задавали выше, но читать лень: Почему бы не сделать модели переключателей в 3D и забабахать интерфейс игры? Это будет современнее и полезнее.
Вот посмотри как я когда-то делал для своего завода. Прикрепляю в Аттаче прототип управления станка.
Это наработка, не совсем готовый продукт, но все же.
Вложения
Тип файла: rar Game 17 (Лежачий).part1.rar (500.0 Кб, 17 просмотров)
Тип файла: rar Game 17 (Лежачий).part2.rar (500.0 Кб, 14 просмотров)
Тип файла: rar Game 17 (Лежачий).part3.rar (453.4 Кб, 17 просмотров)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2015, 19:44   #52
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Воистину, настойчиво и плюя на неудачи 2 месяца сочинять формулу сравнения углов между статичным вектором и предыдущим и статичным и текущим - надо обладать истинной целеустремленностью джедая))) Люк, как известно, этим качеством не обладал, что стало плохо для вселенной, но хорошо для сюжета)

Последний раз редактировалось Smogg; 18.01.2015 в 19:46.
Smogg вне форума Ответить с цитированием
Старый 22.01.2015, 18:11   #53
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

На сегодня получилось так:
скриншот: http://rghost.ru/60494850.view ;
программа тут: http://rghost.ru/60494895 .
Код:
unit Unit1;   // \14.01.15\полярная система координат20
    {$R Resources.RES}   // включить файл ресурсов
interface

uses
  .......
type
  ....

    procedure .......

  private
    { Private declarations }
  public
    { Public declarations }
    mous : TMouse;  // В пункте "Public" создаем mous : TMouse;- объект объявлен

  end;

var
  ................
  alpha: Extended;//угол поворота со знаком направления!!!
implementation

{$R *.dfm}
const
.....
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Back.Free;
  bitmap.Free;
  Buf.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // определим сохраняемую область фона
  BackRct:= Bounds(X_bitmap,Y_bitmap,W,H);
  // сохраним ее копию
  Buf.Canvas.CopyRect(BufRet,Back.Canvas,BackRct);
  // выведем рисунок
  Form1.image1.canvas.Draw(X_bitmap,Y_bitmap,bitmap);
end;

procedure TForm1.Image1Click(Sender: TObject); //щелчок левой кнопкой мыши
  var RadioButton: TRadioButton;

begin
 ......................
    Caption:='Левый Click   x1='+ FloatToStr(x1)+ ' y1='+ FloatToStr(y1);
  end;
 end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);   //щелчок правой кнопкой мыши
   .........................
    Caption:='Правый Click x2='+ FloatToStr(x2)+ ' y2='+ FloatToStr(y2);
   //Memo1.Lines.Add('скорректировать новое начало координат на =правый Click kx='+ FloatToStr(x0)+ ' ky='+ FloatToStr(y0));
  {Это настроечное. При пробном компилировании: щелкнуть по будущему центру координат и узнать коэффициенты ошибки kx, ky.
  После исправления ошибки они должны стать: kx=0 и ky=0. Тогда эту строку законнектить
  и компилировать окончательно.}
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  x1x2y1y2 : Extended;//знаменатель в формуле никогда не равен "0" , не допущу!
begin
  Label4.Caption:='левый клик    x1='+ FloatToStr(x1)+ ' y1='+ FloatToStr(y1);
  Label5.Caption:='правый клик   x2='+ FloatToStr(x2)+ ' y2='+ FloatToStr(y2);
  x1x2y1y2:=x1*x2 + y1*y2; // знаменатель в дроби никогда не равен нулю , не допущу!
  if x1x2y1y2 =0 then x1x2y1y2:=0.0001 ; //else  
  x1x2y1y2:=x1*x2 + y1*y2;
  alpha := ArcTan2((x1*y2 - y1*x2), x1x2y1y2);//угол определен от установленного начала координат
  Label3.Caption:='угол alpha      '+FloatToStr(alpha);
 end;

procedure TForm1.FormCreate(Sender: TObject);
............

procedure TForm1.Timer1Timer(Sender: TObject);
      var
   T: Tpoint;
   x00x0y00y0 : Extended;//знаменатель в формуле никогда не равен "0" , не допущу!
 begin
   begin
   Parent:=Form1;//Имя компонента-родителя присваивается свойству Parent
   T:=ScreenToClient(Form1.FDesignSize);//Конвеpтиpует и заменяет в указанном окне значения кооpдинат экpана в Point на кооpдинаты пользователя.
   x0:=Mouse.CursorPos.X+T.x-305-kx; //на самом деле Mous.CursorPos.x  =350 или 305 или 1362
   y0:=Mouse.CursorPos.Y+T.y-170-ky; //на самом деле Mous.CursorPos.y =320 или 197 или 318
   Label1.Caption:='текущее положение курсора на Image в старых координатах  '+' x0='+ inttostr(Mous.CursorPos.x)+ ' y0='+ inttostr(Mous.CursorPos.y);
   Label2.Caption:='проверка нового начала координат    '+'x0='+  FloatToStr(x0)+ ' y0='+ FloatToStr(y0);
   end;
   begin
    position_StringGrid1:=position_StringGrid1+1;
    //формируем массив new_position
    if i>NT3-2 then i:=1 else i:=i+1;      //if i>NT-2 then i:=1 else i:=i+1;
    new_position3[i]:=position_StringGrid1;
    // выводим результаты в ячейки таблицы
    StringGrid1.Cells[i, 1] := IntToStr(new_position3[i])
   end;

  if (x0 <> x00) or (y0 <> y00) then // если курсор сдвинули
    begin
    position_StringGrid2:=position_StringGrid2+1;
    //формируем массив new_position
     if m>NT2-2 then m:=1 else m:=m+1;      //
    new_position2[m]:=position_StringGrid2;
    // выводим результаты в ячейки таблицы
    StringGrid2.Cells[m, 1] := FloatToStr(x0);//[столбуец i, строка 1]
    StringGrid2.Cells[m, 2] := FloatToStr(y0);//[столбуец i, строка 2]
    x00x0y00y0:=x00*x0 + y00*y0; // знаменатель в дроби никогда не равен нулю , не допущу!
    alpha := ArcTan2((x00*y0 - y00*x0), x00x0y00y0);//угол определен от установленного начала координат
    StringGrid2.Cells[m, 3] := FloatToStr(alpha);//[столбуец i, строка 3]
    x00:=x0;    y00:= y0;                  // только если были изменения
    end
  else m:=m; // курсор не сдвигали, анализировать нечего до следущего раза
 end;


end.
Изображения
Тип файла: jpg ошибки формулы.JPG (105.1 Кб, 121 просмотров)
Вложения
Тип файла: rar Project1.rar (306.2 Кб, 9 просмотров)
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 22.01.2015 в 18:19.
zvygin1964 вне форума Ответить с цитированием
Старый 26.01.2015, 17:46   #54
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Всё. С поворотами разобрался. Работают как надо.

Но отрисовка рукоятки в положении 'a0_JPG' не исчезает при Button2Click.
Код:
 procedure TForm1.FormActivate(Sender: TObject);
begin
  Back:= TBitmap.Create; // фон
  bitmap:= TBitmap.Create; // картинка
  Buf:= TBitmap.Create; // буфер
  // загрузить из ресурса фон
  Back.LoadFromResourceName(HInstance,'fon_degrees_resh_JPG');
  Form1.Image1.canvas.Draw(0,0,Back);

  // создать буфер для сохранения копии области фона, на которую
  // накладывается картинка
  // определим сохраняемую область фона
  BackRct:= Bounds(X_bitmap,Y_bitmap,W,H);
  // сохраним ее копию
  Buf.Canvas.CopyRect(BufRet,Back.Canvas,BackRct);
  // выведем рисунок
  Form1.image1.canvas.Draw(X_bitmap,Y_bitmap,bitmap);

  W:= bitmap.Width;
  H:= bitmap.Height;
  Buf.Width:= W;
  Buf.Height:= H;
  Buf.Palette:= Back.Palette; // Чтобы обеспечить соответствие палитр!!
  Buf.Canvas.CopyMode:= cmSrcCopy;
  BufRet:= Bounds(0,0,W,H);
  X_bitmap:=0; Y_bitmap:=0; //смещения не будет и все как надо при: x:=0; y:=0; //было: x:= -W; y:= 20;
  // определим сохраняемую область фона
  BackRct:= Bounds(X_bitmap,Y_bitmap,W,H); // и сохраним ее
  Buf.Canvas.CopyRect(BufRet,Back.Canvas, BackRct);

  // определим сохраняемую область фона
  BackRct:= Bounds(X_bitmap,Y_bitmap,W,H);
  // сохраним ее копию
  Buf.Canvas.CopyRect(BufRet,Back.Canvas,BackRct);

  // загрузить из ресурса картинку, которая будет двигаться
  bitmap.LoadFromResourceName(HInstance,'a0_JPG');
  bitmap.Transparent:= True;
  bitmap.TransParentColor:= bitmap.canvas.pixels[1,1];

  // выведем рисунок
  Form1.image1.canvas.Draw(X_bitmap,Y_bitmap,bitmap);
  // загрузить из ресурса картинку, которая появится взамен
  bitmap.LoadFromResourceName(HInstance,'a45_JPG');
  bitmap.Transparent:= True;
  bitmap.TransParentColor:= bitmap.canvas.pixels[1,1];
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Back.Free;
  bitmap.Free;
  Buf.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    // определим сохраняемую область фона
  BackRct:= Bounds(X_bitmap,Y_bitmap,W,H);
  // сохраним ее копию
  Buf.Canvas.CopyRect(BufRet,Back.Canvas,BackRct);
  // выведем рисунок
  Form1.image1.canvas.Draw(X_bitmap,Y_bitmap,bitmap);
end;
Где, чего не так?
Изображения
Тип файла: jpg не исправен bitmap.JPG (17.9 Кб, 112 просмотров)
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 29.01.2015, 22:16   #55
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Вот так заработало, по виду как надо:
- выводится фон, выводится начальное положение ручки.
-Button2Click , выводится фон, выводится новое положение ручки.

Если не подскажете, как это делать правильно, то так и оставлю до лучших времён...
Код:
procedure TForm1.FormActivate(Sender: TObject);
begin    // Создание объекта Bitmap типа TBitMap
  Back:= TBitmap.Create; // фон
  bitmap:= TBitmap.Create; // картинка
  Buf:= TBitmap.Create; // буфер
  // загрузить из ресурса фон
  Back.LoadFromResourceName(HInstance,'fon_degrees_resh_JPG');// Загрузка в BitMap выбранного графического файла
  Form1.Image1.canvas.Draw(0,0,Back); // Перенос изображения на канву формы
  {методом Draw загруженное изображение копируется на канву в область, с координатами(0, 0)}
  // создать буфер для сохранения копии области фона, на которую
  // накладывается картинка
  // определим сохраняемую область фона
  BackRct:= Bounds(X_bitmap,Y_bitmap,W,H);
  // сохраним ее копию
  Buf.Canvas.CopyRect(BufRet,Back.Canvas,BackRct);
  // выведем рисунок
  Form1.image1.canvas.Draw(X_bitmap,Y_bitmap,bitmap);
  W:= bitmap.Width;
  H:= bitmap.Height;
  Buf.Width:= W;
  Buf.Height:= H;
  Buf.Palette:= Back.Palette; // Чтобы обеспечить соответствие палитр!!
  Buf.Canvas.CopyMode:= cmSrcCopy;
  BufRet:= Bounds(0,0,W,H);
  X_bitmap:=0; Y_bitmap:=0; //смещения не будет и все как надо при: x:=0; y:=0; //было: x:= -W; y:= 20;
  // загрузить из ресурса картинку, которая будет двигаться
  bitmap.LoadFromResourceName(HInstance,'a0_JPG');
  bitmap.Transparent:= True;
  bitmap.TransParentColor:= bitmap.canvas.pixels[1,1];
  // выведем рисунок
  Form1.image1.canvas.Draw(X_bitmap,Y_bitmap,bitmap);
 end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Back.LoadFromResourceName(HInstance,'fon_degrees_resh_JPG');// Загрузка в BitMap выбранного графического файла
  Form1.Image1.canvas.Draw(0,0,Back); // Перенос изображения на канву формы
  // выведем рисунок
  bitmap.LoadFromResourceName(HInstance,'a45_JPG');
  bitmap.Transparent:= True;
  bitmap.TransParentColor:= bitmap.canvas.pixels[1,1];
  // выведем рисунок
  Form1.image1.canvas.Draw(X_bitmap,Y_bitmap,bitmap);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin  // Уничтожение объекта BitMap
  Back.Free;
  bitmap.Free;
  Buf.Free;
end;
Изображения
Тип файла: jpg bitmap заработал как надо.JPG (106.0 Кб, 127 просмотров)
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 12.02.2015, 23:34   #56
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Хотел это поместить на MDI формы. http://rghost.ru/8RKzPCkyB
Но тут такое случилось! В момент закрытия .ехе файла на экране появляется сообщение, затем другое и оно начинает повторяться многократно... С трудом остановил это размножение. Может годный шаблон MDI форм лежит где, пылится без надобности?
Изображения
Тип файла: jpg память не может быть read.JPG (26.8 Кб, 169 просмотров)
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 16.02.2015, 06:14   #57
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Это происходит при любом закрытии программы ? Читай открыли программу полностью отдельно ( без дебага из дельфи, из проводника) и сразу закрыли, появится ? Или же нужны какие-то действия сперва в программе ? Если да - приводите последовательность гарантированно приводящую к АВ, ибо у меня после компиляции на дельфи2007 и минимальной работе в программе (просто формы поперещёлкивал, поводил мышкой по картинкам, потыкал каких-то кнопок) и закрыв - ничего в итоге не АВшнулось. Если нужна некая последовательность действий, то это 99% в Вашем "бизнес"-коде значит косяк, а не с мди.

Также советую почитать любую вводную статью по созданию мди, и проверить , делаете ли Вы в соответствии с ней.
Насчёт шаблонов - вряд ли Вам дадут (такое вообще мало кто делает, и шаблонизации оное подлежит с большим трудом, да и мди вышел из моды) и Вы с такими вряд ли разберётесь, я бы посоветовал сперва взять и изучить стандартный дельфи шаблон для мди - File-new-other -projects-mdi application
phomm вне форума Ответить с цитированием
Старый 10.04.2015, 13:53   #58
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Обсуждение в теме "Компонент TImage" http://programmersforum.ru/showthread.php?t=275744 наводит на мысль о необходимости:
-все картинки хранить в .res;
-при запуске .ехе взять их из .res и записать в DrawGrid;
-по мере необходимости брать их из DrawGrid и выводить на TImage.

Если это так, то буду пробовать.

Пока работает так: http://rghost.ru/6TwJRxqjr
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 10.04.2015 в 15:07.
zvygin1964 вне форума Ответить с цитированием
Старый 16.08.2015, 16:05   #59
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Хвастаюсь: http://www.fayloobmennik.net/5386944
Изображения
Тип файла: gif 39.gif (84.0 Кб, 178 просмотров)
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 17.01.2016, 21:12   #60
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Советовали мне заменить все глобальные переменные на массив. Так и сделал:
Код:
var_integer: array of integer;// все локальные переменные с такими свойствами:
    //=============================================================  :
   {var_integer[1] показ первой строки отсчета промежутков времени:     procedure бесконечный_массив(номер_массива_переменных; ограничение_массива)
    var_integer[2]
    var_integer[3] показ второй и третьей строки координаты положения курсора
    var_integer[4] показ четвертой строки угол поворота курсора зо промежуток времени в градусах со знаком поворота
    var_integer[5]
    var_integer[6]  coordinate_Down_Up_Left_Right[var_integer[6]].X:= 0; coordinate_Down_Up_Left_Right[var_integer[6]].Y:= 0;
    координаты нажатия: лево-право  верх-низ
    var_integer[7]:= счетчик промежутков времени
    var_integer[8] //количество выборочных расчетов поворота.  coordinate_rotation[ var_integer[8]].X    coordinate_rotation[ var_integer[8]].Y  знака поворота ArcTan2_coordinate_rotation[var_integer[8]]
    var_integer[9] показ в восьмой строке   coordinate_Down_Up_Left_Right
    var_integer[10] // WhereFurther(var max: Integer); // управление сюжетами развития событий
    var_integer_size=10; //максимальное число глобальных переменных
    var_integer[11]   Down_Up_Left_Right.Y:   //где нажимал "в последнее время - в среднем" внизу-вверху от полюса
    var_integer[12]  Down_Up_Left_Right.X:    //где нажимал "в последнее время - в среднем" слева-справа от полюса
    var_integer[13] //координата X
    var_integer[14] //координата Y
    var_integer[15]  //счетчик  Timer2
    var_integer[16]  //номер customer : array of TCustomer; //выбор пути выполнения
    var_integer[17]  //параметр по которому произойдет выход из Timer1Timer (1 ниже-выше, 2 слева-справа, 3 поворот)
    var_integer[18]  //выход из Timer1Timer произойдет при достижении этого значения параметра var_integer[17]
    SetLength(var_integer, var_integer_size);//выделяю память для array глобальных переменных}
Путаюсь где-чего.
А сделать кучу массивов каждый состоящий из одного элемента, это мне можно ? (только мне)
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Платформа автоматизации "бизнеса" или конфигурирование против кодинга serzh-kz Общие вопросы по программированию, компьютерный форум 0 06.06.2013 05:35
Диагностика уровня закритичности конвективного течения на основе численного решения задачи Релея -Бенара(Делфи) Эльвира91 Помощь студентам 3 15.03.2013 17:27
ListBox или ComboBox, выбор элмента, в Delphi7 Николай ПН Помощь студентам 11 17.11.2010 19:55
Жильцы против Управляющих компаний или когда в нашей стране восторжествует справедливость? vasek123 Свободное общение 18 05.11.2010 06:37
Arcgis проблема с направлением течения реки treder Помощь студентам 0 06.04.2010 23:07