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
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
1: Canvas.Pixel[x,y]:=clRed;
2: A choćby do pliku Ini
No tak ale jeśli nie wiemy ile będzie punktów to też do ini a jeśli tak to jak?
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 :)
Czy mógłbyć mi wklepać parę linijek kodu abym wiedział o co ci chodzi?
Jak w ini umieścić pentelkę?
Pozdrawiam
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
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
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.
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
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.