dostaw punkt na ekranie i przesuń go w lewo

0

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...

0

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

0

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)

0

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)
&gt
&gt--
&gtSebo +)
&gt(D3)
a jak przesuwać bitmapę????????? i to tak aby dorysowywany fragment znowu był tą bitmapą?????
sOKOle

0

Kopiujesz bitmapę do innej
czyścisz tom pierwszą
wklejasz tymczasową do tej poprzedniej tylko jedną jednostkę bliżej

Jestem na GG &gt&gt możesz sobie wciągnąć http://www.gadu-gadu.pl/pobierz.html
i się skonsultować {hello} --Sebo +)
(D3)

0

Sebo napisał:
Kopiujesz bitmapę do innej
&gtczyścisz tom pierwszą
&gtwklejasz tymczasową do tej poprzedniej tylko jedną jednostkę bliżej
&gt
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

0

sOKOle napisał:
Sebo napisał:
&gtKopiujesz bitmapę do innej
&gt&gtczyścisz tom pierwszą
&gt&gtwklejasz tymczasową do tej poprzedniej tylko jedną jednostkę bliżej
&gt&gt
&gtnie lubię komunikatorów, zajmują zbyt wiele czasu....
&gt
&gtś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?
&gt
&gtsOKOle
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... &gt&gt 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&gtwykres, a potem wyczyścić część przeznaczoną na nowe rysowanie) możesz sprubować skopiować całą bitmapę i obciąć niepotrzebną część.--Sebo +)
(D3)

0

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&gt0 then
begin
BitmapNew.Canvas.Pixels[199,Y]:=clWhite;
dec(Y);
end;
1: if y&lt100 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

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