Необходимо написать программу-редактор. В окне программы строится схема релейной защиты (типа электрической схемы), а потом по нажатию кнопки, допустим, старт происходил бы расчет схемы.
Как реализоват расчет схемы я придумал. А вот как сделать, что-то наподобие редактора векторной графики для построения не знаю. Есть идея реализовать это при помощи DirectX или OpenGL, но в графике не бум-бум.
Так вот как реализовать это как можно проще и желательно на Delphi, но можно и на других языках. Подскажите хоть направление
А вот как сделать, что-то наподобие редактора векторной графики для построения не знаю.
Все очень, очень и очень просто. Нужно создать ряд классов - для каждого элемента свой класс, чтобы он мог сам себя правильно рисовать ну и ессно знал - шо он такое есть. И соответственно иметь список (TList) всех этих рисуемых объектов, чтобы в случае удаления какого-то элемента, ты мог просто удалить его из списка и все перерисовать по-новому. Это в общих чертах. Короче начать и кончить.
Vic-Tor писал(а):
Так вот как реализовать это как можно проще и желательно на Delphi
Используя метафайлы - EMF aka Extended Metafile Format. Delphi с помощью классов TMetafile и TMetafileCanvas поддерживает метафайлы Винды. Собсно ими все и разруливается. Набросал пример рисования, в обработчике события для Button1 создается виртуальный холст, рисуется, и сохраняется в файл, в обработчике события для Button2 загружается из файла.
procedure TForm1.FormDestroy(Sender: TObject); begin Emf.Free; PB.Free; end;
procedure TForm1.Button1Click(Sender: TObject); var EmfCanvas: TMetafileCanvas; arr: array of TPoint; i, Size: Longword; begin Size:= 11; SetLength(arr, 9); EmfCanvas:= TMetafileCanvas.CreateWithComment(Emf, 0, 'бла-бла-бла...', 'художник из меня... мдя...(C)_SGK'); with EmfCanvas do begin Brush.Color := clWhite; FillRect(EmfCanvas.ClipRect); try Font.Size:= 10; Font.Style:= EmfCanvas.Font.Style + [fsBold]; Font.Color:= clGray; TextOut(3, 3, 'бла-бла-бла...'); Pen.Color:= clBlue; Pen.Width:= 2; for i:= Low(arr) to High(arr) do begin arr[i].X:= Random(PB.Width - Size); arr[i].Y:= Random(PB.Height - Size); Rectangle(arr[i].X, arr[i].Y, arr[i].X + Size, arr[i].Y + Size); end; Pen.Color:= clRed; Pen.Width:= 1; for i:= Low(arr) to High(arr)-1 do begin MoveTo(arr[i].X + Size div 2, arr[i].Y + Size div 2); LineTo(arr[i+1].X + Size div 2, arr[i+1].Y + Size div 2); end; finally Free; end; end; PB.Canvas.Draw(0, 0, Emf); Emf.SaveToFile('C:\бла-бла-бла.emf'); end;
procedure TForm1.Button2Click(Sender: TObject); begin if FileExists('C:\бла-бла-бла.emf') then begin Emf.LoadFromFile('C:\бла-бла-бла.emf'); PB.Canvas.Draw (0, 0, Emf); end else MessageBox(Application.Handle, 'Не сложилось, однако…', 'Мдя...', MB_OK + MB_ICONWARNING); end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения