jak napisać taki program co będzie dostawiał punkty na ekranie a następnie przesuwał je w lewo? chodzi o stworzenie na bieżąco wykresu, który wraz z dopływem danych będzie przesuwał się w lewo, a nowe dane będą dostawiane po prawej stronie...
proszę o rady, wskazówki i pomoc.
sOKOle hmm...
w petli sterujacej doplywem danych, w kazdym kroku musisz zrobic x-1 (x to pozycja wg. osi OX) wspolzednej kazdego punktu, no i oczywiscie zaczac wyswietlac wykres maksymalnie z prawej strony
możesz narysować wykres na bitmapie a następnie przesuwać jej kawałek o jednostkę i dorysowywać tylko nowy kawałek! (w pętli wysyłającej dane)--Sebo +)
(D3)
Sebo napisał:
możesz narysować wykres na bitmapie a następnie przesuwać jej kawałek o jednostkę i dorysowywać tylko nowy kawałek! (w pętli wysyłającej dane)
>
>--
>Sebo +)
>(D3)
a jak przesuwać bitmapę????????? i to tak aby dorysowywany fragment znowu był tą bitmapą?????
sOKOle
Kopiujesz bitmapę do innej
czyścisz tom pierwszą
wklejasz tymczasową do tej poprzedniej tylko jedną jednostkę bliżej
Jestem na GG >> możesz sobie wciągnąć http://www.gadu-gadu.pl/pobierz.html
i się skonsultować {hello} --Sebo +)
(D3)
Sebo napisał:
Kopiujesz bitmapę do innej
>czyścisz tom pierwszą
>wklejasz tymczasową do tej poprzedniej tylko jedną jednostkę bliżej
>
nie lubię komunikatorów, zajmują zbyt wiele czasu....
średnio rozumiem Twoją odpowiedź, czy dorysowuję nowy punkt na tej bmp w pamięci? czy na tej na ekranie? a jak kopiować i wklejać bitmapy?
sOKOle
sOKOle napisał:
Sebo napisał:
>Kopiujesz bitmapę do innej
>>czyścisz tom pierwszą
>>wklejasz tymczasową do tej poprzedniej tylko jedną jednostkę bliżej
>>
>nie lubię komunikatorów, zajmują zbyt wiele czasu....
>
>średnio rozumiem Twoją odpowiedź, czy dorysowuję nowy punkt na tej bmp w pamięci? czy na tej na ekranie? a jak kopiować i wklejać bitmapy?
>
>sOKOle
Ja wyobrarzam to sobie tak:
na ekranie masz image1:timage;// na którym chesz mieć wykres
w pamięci wykres:Tbitmap;// tu będzies rysował wykres i przepisywał to na ekran (żeby nie migało)
wykrest:Tbitmap;//bitmapa do której będziesz kopiował "starą" część wykresu.
do copiowania urzywasz obiektu tcanvas (podobnie jak do rysowania - nie pamiętam teraz dokładnej składni poleceń hmm... >> zajrzyj do help'a ;) )
ps: jak niebędziesz mógł znależć funkcji kopiującej kawałek obrazka (jak znajdziesz możesz spróbować kopiować bezpośrednio z wykres>wykres, a potem wyczyścić część przeznaczoną na nowe rysowanie) możesz sprubować skopiować całą bitmapę i obciąć niepotrzebną część.--Sebo +)
(D3)
Nigdy nie bawilem sie grafika w Delphi, ale z ciekawosci zaczalem kombinowac i zrobilem co nastepuje. Na formie jest Image1 o rozmiarach 200 (poziom) na 100 (pion), oraz Timer1 z interval 50.
dziala, choc miga i nie jest zbyt szybkie. Chetnie zobacze poprawki od kogos madrzejszego. Ladniej tez byloby wstawic zmienne Y, Bitmapnew itd do klasy formularza ale mi sie nie chcialo :)))
Oto kod
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Timer1: TTimer;
Label1: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
procedure NextX;
public
{ Public declarations }
end;
var
Form1: TForm1;
Y : Integer;
BitmapNew:Tbitmap;
OldRect:TRect;
NewRect:TRect;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
NextX;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Y:=50;
BitmapNew:=TBitmap.Create;
BitmapNew.Height:=100;
BitmapNew.Width:=200;
Image1.Picture.Assign(BitmapNew);
OldRect.Left:=0;
OldRect.Right:=200;
OldRect.Top:=0;
OldRect.Bottom:=100;
NewRect.Left:=-1;
NewRect.Right:=199;
NewRect.Top:=0;
NewRect.Bottom:=100;
end;
procedure TForm1.NextX;
begin
BitmapNew.Canvas.CopyRect(NewRect,BitmapNew.Canvas,OldRect);
case Random(3) of
0: if Y>0 then
begin
BitmapNew.Canvas.Pixels[199,Y]:=clWhite;
dec(Y);
end;
1: if y<100 then
begin
BitmapNew.Canvas.Pixels[199,Y]:=clWhite;
inc(Y);
end;
end;
BitmapNew.Canvas.Pixels[199,Y]:=clBlack;
Image1.Picture.Assign(BitmapNew);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
BitmapNew.Free;
end;
--Pawel
Delphi6