Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TImage "scrollen" (https://www.delphipraxis.net/43116-timage-scrollen.html)

mr47 29. Mär 2005 14:14


TImage "scrollen"
 
Tag! :hi:

Ich habe ein TImage mit dem ich per Canvas ein art Diagramm zeichne. (Man kennt das aus der CPU-Auslastung (Taskmanager)). Das klappt auch alles wunderbar. Nur irgendwann ist das beste TImage zu ende ^^. Wie kann ich machen, dass das immer so ein Stückchen weiterscrollt? :?:

Danke für Hilfe mfg :mrgreen:

ps: hab schon gesucht.... :-(

uschi 29. Mär 2005 14:16

Re: TImage "scrollen"
 
auf ne scollbox legen

Speedmaster 29. Mär 2005 14:19

Re: TImage "scrollen"
 
..ich glaube er meinte das ein bischen anderst!
Meine Idee wäre Spontan gewesen sämtliche Reihen auf einmal eins nach Links zu schieben, und das Linke zu überschreiben und Rechts eins hinzuzufügen, zur Technischen umsetzung kann ich so schnell nichts sagen, da müsste man sich länger damit beschäftigen!

Khabarakh 29. Mär 2005 14:23

Re: TImage "scrollen"
 
http://www.delphipraxis.net/internal...ct.php?t=39486
Aber nicht die erste Lösung nehmen :mrgreen: .

mr47 29. Mär 2005 14:23

Re: TImage "scrollen"
 
Zitat:

Zitat von uschi
auf ne scollbox legen

Wie meinst du das? Dann vom Image AutoSize auf true und dann halt die Box scrollen.... *MalTesten*

@ Speedmaster: Die Technische Umsetzung - die fehlt mir auch :lol:

mfg :hi:

@ Khabarakh: Des Peil ich irgendwie net :-|

Jarmen_Kell 29. Mär 2005 14:40

Re: TImage "scrollen"
 
Naja musste vermutlich immer neu zeichnen lassen.
Könntest auch den Left-Abstand nicht direkt angeben sondern als ne Variable, die du dann immer hoch-/ runtersetzt.

Schreib mal bitte genauer, was das werden soll!

mr47 29. Mär 2005 14:44

Re: TImage "scrollen"
 
Vom Prinzip her (hab ich oben schon geschrieben) wie das CPU-Diagramm im TaskManager. Aber ich will auch nicht unbedingt ein 5000 Pixel langes Image auf meiner Form haben, von dem man nur 300 Pixel sieht....

mfg :gruebel:

Alexander 29. Mär 2005 14:45

Re: TImage "scrollen"
 
Scrollbox ist sicherlich nicht dafür geeignet. Das Image würde ja immer größer werden.

Speicher die ganzen Werte in nem Array und zeichne dann mit Hilfe dieser Werte im Array. Wenn ein neuer Wert hinzukommt und die max. Größe des Arrays erreicht ist (also dann wenn das Image "voll" ist), dann musst du das als erstes eingefügte Element löschen und alle anderen Elemente verschieben. Dann wird das Element das zweite Element, das erste usw...
Mit den aktualisierten Werten kannst du dann wieder zeichnen...

Ums ständige neuzeichnen kommst du nicht herum

mr47 29. Mär 2005 14:55

Re: TImage "scrollen"
 
:thumb: Jo so mach ich's. Und mal moch ne ganz dumme Frage: Wie kann ich das Image wieder löschen :oops: ?


Vielen Dank euch allen :thumb: :hi:

teebee 29. Mär 2005 14:59

Re: TImage "scrollen"
 
Zitat:

Zitat von Alexander
Ums ständige neuzeichnen kommst du nicht herum

Wenn Du immer nur das neuzeichnest, was neu ist und den Rest verschiebst, geht es um einiges flotter, als immer alles neu zu zeichnen.
Schau Dir mal diesen Thread an, könnte Dir weiterhelfen.

Gruß, teebee

Alexander 29. Mär 2005 15:15

Re: TImage "scrollen"
 
Stimmt @teebee :)

@mr47: Mit der Hintergrundfarbe überzeichnen?

Khabarakh 29. Mär 2005 15:52

Re: TImage "scrollen"
 
Den Code von Luckie kannst du eigentlich gleich so übernehmen, getestet habe ich ihn aber auch noch nicht.
Delphi-Quellcode:
type
  TValueArray = array of Cardinal;

var
  ValueArray: TValueArray;

implementation

{$R *.dfm}


procedure PaintGraph(Bmp: TBitmap; Color: TColor; ValueArray: TValueArray);
var
  rect: TRect;
  i: Integer;
  len: Integer;
begin
  Bmp.Canvas.Brush.Color := clWhite;
  rect.Top := 0;
  rect.Left := 0;
  rect.Right := Bmp.Width;
  rect.Bottom := Bmp.Height;
  Bmp.Canvas.FillRect(rect);
  len := length(ValueArray);
  Bmp.Canvas.Pen.Color := Color;
  for i := 0 to Bmp.Width - 1 do
  begin
    Bmp.Canvas.MoveTo(i, Bmp.Height);
    Bmp.Canvas.LineTo(i, Bmp.Height-ValueArray[len-i-1]);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OffScreenBmp := TBitmap.Create;
  OffScreenBmp.Width := ClientWidth;
  OffScreenBmp.Height := ClientHeight;
  SetLength(ValueArray, ClientWidth);
  Index := length(ValueArray) - 1;
  Randomize;
  Timer1.Interval := 50;
  DoubleBuffered := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(OffScreenBmp);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  BitBlt(Canvas.Handle, 0, 0, ClientWidth, ClientHeight, OffScreenBmp.Canvas.Handle, 0, 0, SRCCOPY);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: Integer;
begin
  ValueArray[Index] := random(ClientHeight); //GetCPUUsage * 10;
  Dec(Index);
  if Index = 0 then
  begin
    for i := 0 to length(ValueArray) - 1 do
      ValueArray[i] := 0;
    PaintGraph(OffScreenBmp, clRed, ValueArray);
    Repaint;
    Index := length(ValueArray)-1;
  end;
  PaintGraph(OffScreenBmp, clRed, ValueArray);
  Repaint;
end;
Zitat:

Und mal moch ne ganz dumme Frage: Wie kann ich das Image wieder löschen?
Bitmap32.Clear(clWhite32); :mrgreen:

Alexander 29. Mär 2005 16:21

Re: TImage "scrollen"
 
TBitmap32 <> TBitmap oder sogar Canvas!

Khabarakh 29. Mär 2005 16:23

Re: TImage "scrollen"
 
Ich wollte ja nur darauf hinweisen, wie sehr die GR32-Lib die Arbeit erleichtert, deswegen auch der Link und die Namensgebung :wink: .

Alexander 29. Mär 2005 16:46

Re: TImage "scrollen"
 
Die Lib ist wirklich klasse, aber einen Clear-Ersatz gibt es beim normalen Canvas auch. Du musst einfach alles übermalen, das ist ja auch nicht all zu umständlich..

mr47 29. Mär 2005 16:56

Re: TImage "scrollen"
 
Ok. Danke euch. :wink:

Khabarakh 29. Mär 2005 16:59

Re: TImage "scrollen"
 
Zitat:

Zitat von Alexander
Die Lib ist wirklich klasse, aber einen Clear-Ersatz gibt es beim normalen Canvas auch. Du musst einfach alles übermalen, das ist ja auch nicht all zu umständlich..

Eigentlich nicht, aber das ist wie beim TabbedBrowsing, es geht einfach alles leichter und schneller :o) .
Delphi-Quellcode:
Bitmap.Canvas.Pen.Color := clWhite;
Bitmap.Canvas.Brush.Color := clWhite;
Bitmap.Canvas.Rectangle(Rect(0, 0, Bitmap.Width, Bitmap.Height));

Bitmap32.Clear(clWhite32);


Bitmap.Canvas.Pen.Color := clRed;
Bitmap.Canvas.Brush.Style := bsClear;
Bitmap.Canvas.Rectangle(MyRect);

Bitmap32.FrameRectS(MyRect, clRed32);
Etwas übertrieben :zwinker: .

[edit]Hups, langsam wirds etwas OT.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz