Dynamiczne tworzenie okęgu i jego zapis

0

Witam
Znacie jakiś sposób na dynamiczne stworzenie okręgu i zapisanie w pliku jego współrzędnych i koloru do pliku. Z samym rysowaniem pewnie bym sobie poradził ale jak to zapisać do pliku. Kiedyś widziałem taki kod prawdopodobnie jest w dziale "kody" zwał się grapro czy jakoś tak. To jedyny przykład z jakim udało mi się spotkać. Tyle tylko że jak dla mnie za bardzo skomplikowany. Może znacie jakieś prostsze rozwiązanie.
Mam nadzieje ża administrator nie wywali tego tematu do kosza :)

Pozdrawiam

0

yyyyy...... nie rozumiem o co Ci chodzi pisząc "dynamicznie stworzyć okrąg" potrzebujes tylko promienia, przesynięcia po X i Y no i tego koloru czyli:

type TOkrag=record
         R:Word;
         Dx,Dy:Word; // przesunięcie;
        Kol:TColor; // kolor okręgu;
       end;

a zapis to jż jako plik typowany (czyli SaveFile:file of TOkrag);, no a rysowanie to wprost ze wzoru na okrąg

0

Chodzi o grafikę wektorową? Jeśli tak, to zapisujesz po prostu pionowy i poziomy promień okręgu/elipsy oraz jego współrzędne... Żadna filozofia.

0

Może źle się wyraziłem nie koniecznie musi to być okrąg może być dowolna figura która ma służyć jako punkt na formie. Ważne jest aby ten punkt był tworzony dynamicznie dlaczego? Dlatego że tych punktów może być np 1000. Problem stanowi zapis współrzędnych tych punktów i jago kolor. Z tworzeniem dynamicznym jakoś sobie poradze ale jak zapisać to do pliku?

0

Zaraz zaraz.. po kolei. Przede wszystkim trzeba jednoznacznie określić co ma zawierać pojedynczy egzemplarz danych. Niech będzie to w/w punkt. - zatem najłatwiej zrobić tablicę dynamiczną TPoint.

type
TMyPoints = array of TPoint;

Tym sposobem masz już tablicę tych punktów.. - zapis można robić na 10-tki różnych sposobów (tu odsyłam już do artykułów). Ale pamiętaj, że tym sposobem określasz tylko punkty.. nic więcej - żadnych fizycznych figur tutaj nie ma. Napisz dokładnie o co Ci chodzi.

0
  1. Wrzuć na formę komponent Image
  2. Stwórz plik "Plik.txt" i zapisz w folderze z projektem
  3. Napisz następujacą procedurę (zdarzenie Image1.OnMouseDown) służącą do rysowania okręgów i zapisywania ich współrzędnych w pliku
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
    f:TextFile;
    r:integer;
begin
    r:=50;                   //odleglosc od srodka do rogu kwadratu wyznaczajacego elipse
    Image1.Canvas.Ellipse(X-r,Y-r,X+r,Y+r);
    assignfile(f,'plik.txt');
    append(f);      //otwieramy plik w trybie dopisywania do końca
    writeln(f,X);
    writeln(f,Y);
    closefile(f);
end;
  1. Aby podczas otwierania programu załadować dane z pliku i narysować okręgi - kórrych dane są zapisane w pliku oprogramuj zdarzenie Form1.OnCreate np tak
procedure TForm1.FormCreate(Sender: TObject);
var
    f:TextFile;
    r,X,Y:integer;
begin
    r:=50;                   //odleglosc od srodka do rogu kwadratu wyznaczajacego elipse
    assignfile(f,'plik.txt');
    reset(f);                //otwieramy plik do czytania
    while not eof(f) do      //dopóki są jakies dane w pliku
    begin
        readln(f,X);         //czytamy wspolrzedna X
        readln(f,Y);         //czytamy wspolrzedna Y
        Image1.Canvas.Ellipse(X-r,Y-r,X+r,Y+r); //rysujemy okrąg
    end;
    closefile(f);
end;
0

assignfile(f,'plik.txt');

ale czy w tym przypadku współrzędne zostaną zapisane do pliku, a co jeśli utworzymy dynamicznie następny okrąg?

0

a jak zapisać kolor i następnie go odczytać?

0

Nie można zapisać 2 danych jednocześnie, albo x,y albo tcolor trzeba wybrać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1