DELPHI
Proszę o pomoc w rozwiązaniu mojego problemu.
Liczę na pomoc w sensie podania jakich komponentów i procedur użyć.
Mianowicie muszę napisać program, który będzie wyświetlał punkty ze StringGrida w oknie aplikacji, a następnie możliwe będzie narysowanie dowolnego wieloboku i zapisanie w osobnych plikach tekstowych punktów wewnątrz wieloboku i punktów na zewnątrz.
Kompletnie nie wiem jak się za to zabrać.
Będę wdzięczny za wszelkie wskazówki
Mianowicie muszę napisać program, który będzie wyświetlał punkty ze StringGrida w oknie aplikacji
Co to znaczy "wyświetlał punkty w oknie aplikacji"? Gdzie i w jaki sposób chcesz je wyświetlić?
Liczę na pomoc w sensie podania jakich komponentów i procedur użyć.
Możesz użyć dosłownie wszystkich kontrolek, na których możesz rysować; Jeśli nie chcesz bawić się z WinAPI to znajdź takie, które posiadają właściwość Canvas
- będziesz mógł dość łatwo po nich rysować, bo ich obsługa jest banalna (możesz także rysować po kanwie formularza); Nada się do tego najbardziej TPaintBox
z zakładki System
(pod Delphi 7); Więcej informacji na temat obsługi TCanvas
znajdziesz w lepszych kursach z sieci, czy tutorialach;
a następnie możliwe będzie narysowanie dowolnego wieloboku
Do rysowania wieloboków w klasie TCanvas
służy metoda Polygon
(z wypełnieniem) lub Polyline
(bez wypełnienia):
procedure TForm1.Button1Click(Sender: TObject);
const
{ punkty dla trójkąta z wypełnieniem }
POLY_POINTS: array [0 .. 2] of TPoint = ((X: 10; Y: 10),
(X: 10; Y: 80),
(X: 80; Y: 80));
begin
with PaintBox1.Canvas do
begin
Pen.Color := clBlack;
Brush.Color := clBlue;
Polygon(POLY_POINTS);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
{ punkty dla trójkąta bez wypełnienia }
POLY_POINTS: array [0 .. 3] of TPoint = ((X: 10; Y: 10),
(X: 10; Y: 80),
(X: 80; Y: 80),
(X: 10; Y: 10));
begin
with PaintBox1.Canvas do
begin
Pen.Color := clBlack;
Brush.Color := clBlue;
Polyline(POLY_POINTS);
end;
end;
Zauważ, że metoda Polyline
potrzebuje o jeden punkt więcej, który będzie miał takie same współrzędne jak pierwszy, bo nie zamyka całości; Jak nie chcesz martwić się o kopiowanie pierwszego punktu to wykorzystaj Polygon
i ustaw kolor wypełnienia na taki sam, jak tła;
i zapisanie w osobnych plikach tekstowych punktów wewnątrz wieloboku i punktów na zewnątrz.
Pliki tekstowe nie nadają się do przechowywania takich danych (ze względu na konieczność konwersji) - lepiej użyć plików amorficznych czy typowanych - ich obsługa nie jest trudna, a poczytać o nich możesz w tym serwisie w tym dziale Kompendium Programisty;
Nazwę języka/środowiska umieszczaj w tagach wątku, nie w treści;
furious programming napisał(a):
Zauważ, że metoda
Polyline
potrzebuje o jeden punkt więcej, który będzie miał takie same współrzędne jak pierwszy, bo nie zamyka całości
To jakiś bezsens. Jak chcesz mieć poligon bez wypełnionego środka to robisz.
Pen.Color := clBlack;
Brush.Style := bsClear;
Polygon(POLY_POINTS);
Nie rozumiem po kiego dodawać dodatkowy punkt aby za pomocą PolyLine zasymilować działanie Polygon.
To tak jak by proponować: exp(ln(x)+ln(x)) zamiast x*x - owszem działa tak samo i daje te same wyniki.
_13th_Dragon napisał(a)
To jakiś bezsens. Jak chcesz mieć poligon bez wypełnionego środka to robisz.
Pen.Color := clBlack;
Brush.Style := bsClear;
Polygon(POLY_POINTS);
Nie rozumiem po kiego dodawać dodatkowy punkt aby za pomocą PolyLine zasymilować działanie Polygon.
Też nie rozumiem, dlatego napisałem:
Furious Programming napisał(a)
Jak nie chcesz martwić się o kopiowanie pierwszego punktu to wykorzystaj Polygon i ustaw kolor wypełnienia na taki sam, jak tła;
Albo ustawić taki sam kolor jak tła (szkoda zachodu na wypełnianie), albo tak jak wspomniałeś - Brush.Style := bsClear
;
Napisałem to żeby pytacz nie zdziwił się, że Polyline
nie zamknie mu figury;
A ja mam dejavu, bo identyczny wątek był jakiś czas temu, ale nie mogę go teraz odnaleźć. Wtedy odpowiedziałem o ile pamiętam, że można skorzystać z TImage albo jakiegoś PaintBoxa i tym podobne, to już się nie będę powtarzał. Wystarczy, że autor wątku to chyba zrobił. Albo może dwie osoby dostały kiedyś lub w innym czasie podobne zadanie zaliczeniowe? :/