Rysowanie punktu

0

Jak narysować punkt na formie nadać mu kolor a następnie zapisać to wszystko czyli informacje o położeniu i kolorze do pliku.

Sporo roboty albo tylko tak mi się wydaje. Może ktoś ma jakiś pomysł?

Pozdrawiam

0

1: Canvas.Pixel[x,y]:=clRed;
2: A choćby do pliku Ini

0

No tak ale jeśli nie wiemy ile będzie punktów to też do ini a jeśli tak to jak?

0

ile punktów jest to musisz wiedziec :> i wtedy robisz sobie sekcje np: [main] i pole IlePun=Iles_Tam i sekcje w punktami które zapisujesz w petli od 1 do Iles_Tam a odczyt tak samo.
Oczywiście jest jeszcze pełno innych rozwiazań ale ja osobiście Ini lubie :)

0

Czy mógłbyć mi wklepać parę linijek kodu abym wiedział o co ci chodzi?
Jak w ini umieścić pentelkę?

Pozdrawiam

0
type TPunkt=record
  X,Y:integer;  //pozycja
  R,g,b:byte;   // kolor
  end;

var Ini:TIniFiles;
      i:integer;
      Point:array of TPunkt;

(...)
begin
  Ini:=TIniFiles.Create(sciazka);
  Ini.WriteInteger('Main','IlePun',High(Point));
  for i:=0 to High(Point) do
  begin
    Ini.WriteInteger('Piont','Point['+IntToStr(i)+'].x',Point[i].X);
    Ini.WriteInteger('Piont','Point['+IntToStr(i)+'].y',Point[i].y);
    Ini.WriteInteger('Piont','Point['+IntToStr(i)+'].r',Point[i].r);
    Ini.WriteInteger('Piont','Point['+IntToStr(i)+'].g',Point[i].g);
    Ini.WriteInteger('Piont','Point['+IntToStr(i)+'].b',Point[i].b);

  end;
end;

A przy każdym rysowaniu nowego punktu dajesz:

var H:integer;
begin
  H:=Length(point)+1;
  SetLength(Point,H);
  Point[h].x:=Jakiś_X;
  Point[h].x:=Jakiś_Y;
  Point[h].r:=GetRValue(Canvas.Pixel[Jakiś_X,Jakis_Y]);
  Point[h].g:=GetGValue(Canvas.Pixel[Jakiś_X,Jakis_Y]);
  Point[h].b:=GetBValue(Canvas.Pixel[Jakiś_X,Jakis_Y]);
end;  

A jak sie nie podoba to zrób innym sposobem

0

ile punktów jest to musisz wiedziec

Nie koniecznie. Ja napisalem program, w ktorym musialem zapisac informacje o komponentach tworzonych dynamicznie tak aby po ponownym uruchomieniu programu byly one nadal na formie. Tworzenie kazdego komponentu rownowazne bylo z utworzeniem nowej sekcji w pliku INI (dochodzil kolejny numer do sekcji wg schematu: [Komponent + n], gdzie n to numer kolejnego komponentu) oraz zwiekszalo o 1 wartosc Ilosc w sekcji [Ilosc_komp]. Nastepnie na poczatku programu petla od 1 do Ilosc_komp.
//dopisane: analogicznie mozna zrobic z tymi pikselami bo chyba chodzi Ci o to ze jak juz je narysujesz na formie i zamkniesz aplikacje to po ponownym uruchomieniu chcesz aby one nadal byly tak?

Jak chcesz moge podrzucic zrodlo, wal na gg

0

exrive trafiłaś w samo sedno o to właśnie mi chodzi ja tez cos podobnego kiedyś widziałem a teraz jk mi potrzebne to <ort>NIE MA.</ort> Coś nie mogę się z tobą skontaktować przez gg. Oto moje gg 1197806.
Stokrotne dzięki lukastrz za zainteresowanie wydaje mi się że gdyby fragment tego kodu wstawić w FormCreate to uzystamy to samo ale nie jestem pewiem jak zawitam do domu to wklepę ten kod i zobaczymy.
Dzięki.

0

Oto fragment kodu z mojej aplikacji:

ZAPIS:

procedure TMainForm.ICO_PANEL_ADD_BTNClick(Sender: TObject);
begin
  SetLength(Ikony, Length(Ikony)+1);
  //utworzenie ikony i nadanie jej odpowiednich parametrów
  Ikony[Length(Ikony)-1] := TImage.Create(Self);
  Ikony[Length(Ikony)-1].Parent := Self;
  Ikony[Length(Ikony)-1].Height := StrToInt(ICO_HEIGHT_EDIT.Text);
  Ikony[Length(Ikony)-1].Width  := StrToInt(ICO_WIDTH_EDIT.Text);
  Ikony[Length(Ikony)-1].Cursor   := crHandPoint;
  if FileExists(ICO_ICO_EDIT.Text) then
    Ikony[Length(Ikony)-1].Picture.LoadFromFile(ICO_ICO_Edit.Text)
  else
  Ikony[Length(Ikony)-1].Picture.LoadFromFile(
    ExtractFilePath(Application.ExeName) + 'Pictures\default_icon.ico');
  Ikony[Length(Ikony)-1].Hint     := ICO_FN_EDIT.Text;
  Ikony[Length(Ikony)-1].Stretch  := ICO_STRETCH.Checked;
  Ikony[Length(Ikony)-1].AutoSize := ICO_AS.Checked;
  Ikony[Length(Ikony)-1].Center   := ICO_CENTER.Checked;
  Ikony[Length(Ikony)-1].Left     := Screen.Width div 2;
  Ikony[Length(Ikony)-1].Top      := Screen.Height div 2;
  Ikony[Length(Ikony)-1].OnClick  := IconClick;
  Ikony[Length(Ikony)-1].OnClick  := IconClick;
  Ikony[Length(Ikony)-1].OnMouseDown := MouseDown;
  Ikony[Length(Ikony)-1].OnMouseUp   := MouseUp;
  Ikony[Length(Ikony)-1].OnMouseMove := MouseMove;
  Ikony[Length(Ikony)-1].HelpContext := Length(Ikony)-1;
  //zwiekszenie ilosci komponentow
  Inc(Objects);
  //zapis parametrów ikony do pliku
  try
    INI.WriteInteger('Obiekty','Ilosc_obiektow',Objects);
    INI.WriteInteger('Obiekt'+IntToStr(Objects),'Typ',1); //1 dla TImage
    INI.WriteInteger('Obiekt'+IntToStr(Objects),'Szer',StrToInt(ICO_WIDTH_EDIT.Text));
    INI.WriteInteger('Obiekt'+IntToStr(Objects),'Wys',StrToInt(ICO_HEIGHT_EDIT.Text));
    INI.WriteString('Obiekt'+IntToStr(Objects),'Ikona',ICO_ICO_EDIT.Text);
    INI.WriteBool('Obiekt'+IntToStr(Objects),'DopDoIko',ICO_AS.Checked);
    INI.WriteBool('Obiekt'+IntToStr(Objects),'DopObraz',ICO_STRETCH.Checked);
    INI.WriteBool('Obiekt'+IntToStr(Objects),'Wysrodkuj',ICO_CENTER.Checked);
    INI.WriteString('Obiekt'+IntToStr(Objects),'Uruchom',ICO_FN_EDIT.Text);
  except
    MessageBox(handle, 'An error accure while writing to "VDM_config.ini". Check if the file exists or contact to the author',
    'WDM', MB_ICONERROR);
  end;
  ICO_PANEL.Visible := False;
end;

ODCZYT: (sorry ze moze malo czytelne ale to przez to zawijanie wierszy :/)

//(...)
Objects := INI.ReadInteger('Obiekty','Ilosc_obiektow',0);
//(...)
//dodanie komponentów
  if Objects > 0 then
    begin
      for n := 1 to Objects do
        begin
          case INI.ReadInteger('Obiekt'+IntToStr(n),'Typ',0) of
          1: 
            begin //to w zaleznosci od typu 1 oznacza TImage
             SetLength(Ikony, Length(Ikony)+1);
             Ikony[Length(Ikony)-1] := TImage.Create(Self);
             Ikony[Length(Ikony)-1].Parent := Self;
             Ikony[Length(Ikony)-1].Left := INI.ReadInteger('Obiekt'+IntToStr(n),'Pol_X',0);
             Ikony[Length(Ikony)-1].Top := INI.ReadInteger('Obiekt'+IntToStr(n),'Pol_Y',0);
             Ikony[Length(Ikony)-1].Height := INI.ReadInteger('Obiekt'+IntToStr(n),'Wys',0);
             Ikony[Length(Ikony)-1].Width := INI.ReadInteger('Obiekt'+IntToStr(n),'Szer',0);
             Ikony[Length(Ikony)-1].Cursor := crHandPoint;
               if FileExists(INI.ReadString('Obiekt'+IntToStr(n),'Ikona','')) then
             Ikony[Length(Ikony)-1].Picture.LoadFromFile(INI.ReadString('Obiekt'+IntToStr(n),'Ikona',''))
               else
             Ikony[Length(Ikony)-1].Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Pictures\default_icon.ico');
             Ikony[Length(Ikony)-1].Hint := INI.ReadString('Obiekt'+IntToStr(n),'Uruchom','');
             Ikony[Length(Ikony)-1].Stretch  := INI.ReadBool('Obiekt'+IntToStr(n),'DopObraz',false);
             Ikony[Length(Ikony)-1].AutoSize := INI.ReadBool('Obiekt'+IntToStr(n),'DopDoIko',false);
             Ikony[Length(Ikony)-1].Center := INI.ReadBool('Obiekt'+IntToStr(n),'Wysrodkuj',false);
             Ikony[Length(Ikony)-1].OnClick  := IconClick;
             Ikony[Length(Ikony)-1].OnMouseDown := MouseDown;
             Ikony[Length(Ikony)-1].OnMouseUp   := MouseUp;
             Ikony[Length(Ikony)-1].OnMouseMove := MouseMove;
             Ikony[Length(Ikony)-1].HelpContext := n - 1;
             end; //1: begin
          end; //case
        end; //for n := 0 to Objects - 1 do
    end; //if Objects > 0 then

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