Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bildschirmschoner (https://www.delphipraxis.net/1155-bildschirmschoner.html)

City Light 25. Okt 2002 21:24


Bildschirmschoner
 
Ich bin gerade dabei mir mein eignenden Schoner zu programmieren.
Nun komme ich aber nicht mehr weiter, folgendes..jeder kennt doch den Schoner von Windows.Ich glaub der heißt 3D-Objekt oder so na ja der, der sich von einer Seite zur anderen Seite des Bildschirmes bewegt.Also in allen Richtungen prallt.


Hier was ich zur Zeit Habe
Code:
var
  Form1: TForm1;
  vx: Integer = 1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.DoubleBuffered:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Image1.Left:=Image1.Left +vx;
  if Image1.Left>ClientWidth - Image1.Width-1 then
    vx:=vx*-1;
  if Image1.Left<1 then
    vx:=vx*-1;
end;
kann mir da jemand helfen?
Danke im vorraus

Daniel B 25. Okt 2002 21:30

Hallo City Light,

vielleicht solltest Du uns verraten was denn genau nciht geht.
Welche Zeit hast Du im Timer eingestellt?

Grüsse, Daniel :hi:

City Light 25. Okt 2002 21:34

Hi Daniel

Nun Ich wollte ein Bild im meinen Schoner einbauen, und der sollte kreuz und quer auf dem Monitor umherwandern

Den Timer habe ich auf 10 gestellt

Daniel B 25. Okt 2002 21:42

Hi,

was es machen soll hab ich kapiert, aber nciht was das Problem ist. Was passiert oder was passiert nicht?
Stellt den Timer mal auf 100 oder 200ms. Probiere es aus.
Alles was unter 50ms ist, ist für Windows eine reinen Tortur und Du kannst froh sein, wenn da überhaupt sich was bewegt. Versuch doch mal mit 5 oder 10ms eine Message anzuzeigen. Bei mir ist Windows mit solchen Zeiten schonmal abgestürtzt. Windows ist nunmal KEIN Echtzeitbestriebssystem. Das darfst Du nciht vergessen.

Grüsse, Daniel :hi:

City Light 25. Okt 2002 21:48

Ich habs jetzt auf 100ms gestellt und siehe da es bewegt sich von link nach rechts :bounce2:

Nun wie bekomme ich aber das es sich in allen Richtungen bewegen kann :?:

Daniel B 25. Okt 2002 21:54

Hi,

ich habe es soeben ausprobiert. Es bewegt sich von links nach rechts. Na Toll. :roll: :wink:
Das wollte ich wissen, man muss ja nciht immer alles selber ausprobieren. Übrigens, bei mir läuft es im prinzip auch mit 10ms. Jedoch ruckelt es arg stark. Nciht unter 50ms, dann sieht es gut aus.
Ich werkel mal ein bisschen dran. Wenn Du möchtest das es sich in allen Richtungen bewegt, dann muss man da mit Randomize arbeiten und nciht mit festen links, rechts angaben, bringt ja nichts.

Grüsse, Daniel :hi:

City Light 25. Okt 2002 22:01

Danke für deine Hilfe :D

ein Code schnipzel wäre echt prima da ich noch nicht so den Umgang mit Delphi habe

Ich kann warten :hello: :spin:

d3g 26. Okt 2002 11:41

Hi City Light,

wen du willst, dass das Bild "kreuz und quer" herumfliegt, dann musst du auch eine Bewegung für die y-Richtung einbauen.

Code:
var
  Form1: TForm1;
  vx: Integer = 1;
  vy: Integer = 1;

implementation

{$R *.DFM} 

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.DoubleBuffered:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Image1.Left := Image1.Left + vx;
  Image1.Top := Image1.Top + vy;

  if ((Image1.Left > (ClientWidth - Image1.Width - 1)) or
      (Image1.Left < 1)
  then
    vx := vx * -1;
 
  if ((Image1.Top > (ClientHeight - Image1.Height - 1)) or
      (Image1.Top < 1)
  then
    vy := vy * -1;
end;
Wenn das Image in einem anderen Winkel fliegen soll, dann musst du nur den Startwert von vx bzw. vy ändern.

MfG,
d3g

Daniel B 26. Okt 2002 12:07

Hi,

bei dem Source von d3g:
vor den then fehlt noch eine )
Die Variablen vx un vy dürfen nie den gleichen Wert haben, sonst bewegt sich das Bild nur in der Diagonalen.

Grüsse, Daniel :hi:

Nachtrag: ausserdem musst DU die Scrollbars von Form1 ausschalten, sonst Blitzen die manchmal auf.

Daniel B 26. Okt 2002 12:35

Hi,

so nun auch mein Beispiel:

Code:
var
  Form1: TForm1;
  vx, vy: integer;

implementation
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  vx := -10 + Random(20);
  vy := -10 + Random(20);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Image1.Left := Image1.Left + vx;
  Image1.Top := Image1.Top + vy;
  if (Image1.Left > ClientWidth - Image1.Width - 1) or (Image1.Left < 1) then
    vx := vx * -1;
  if (Image1.Top > ClientHeight - Image1.Height - 1) or (Image1.Top < 1) then
    vy := vy * -1;
end;
Auch hier muss man leider die Scrollbars ausschalten, Vielleicht schaffst Du es selbst dies zu verhindern.
Die Startrichtung ist immer unterschiedlich.

Grüsse, Daniel :hi:

d3g 26. Okt 2002 12:52

Zitat:

Zitat von Daniel B
vor den then fehlt noch eine )

:oops: Das kommt davon, wenn man zu faul ist, Windows zu booten und den Code auszuprobieren...

Zitat:

Zitat von Daniel B
Die Variablen vx un vy dürfen nie den gleichen Wert haben, sonst bewegt sich das Bild nur in der Diagonalen.

Das aber auch nur, wenn das Image am Anfang genau in einer der Ecken befindet.

Die Scollbars kann man übrigens verhindern, indem man kein Image verschiebt, sondern den Inhalt eines Bildes immer auf eine Paintbox zeichnet (am besten mit BitBlt() blittet).

MfG,
d3g

Daniel B 26. Okt 2002 12:59

Hallo d3g,

Zitat:

Zitat von d3g
Das aber auch nur, wenn das Image am Anfang genau in einer der Ecken befindet.

Wie meinst Du das denn jetzt?

Zitat:

Die Scollbars kann man übrigens verhindern, indem man kein Image verschiebt, sondern den Inhalt eines Bildes immer auf eine Paintbox zeichnet (am besten mit BitBlt() blittet).
Oder gleich mit DirektX arbeitet und sich solche Codes spart? :wink:
Einfach ist es nciht ohne DirektX.

Grüsse, Daniel :hi:

City Light 26. Okt 2002 12:59

Hi Daniel !
Ich habe den Code gleich ausprobiert und ich muss sagen es ist genau das was ich suchte! :dancer: er funktioniert super.Danke für die schnelle Hilfe

Also ich habe meine Form BorderStyle auf bsNone
BorderWidth auf 0
alle BorderIcons auf false
Caption auf '' ;
FormStyle auf fsStayOnTop

und keine probleme damit


:bounce1: :hello: :spin:

Gruß
Tino

Daniel B 26. Okt 2002 13:04

Hallo City Light,

juhuu, wieder ein Menschen glücklich gemacht. :wink: :bounce2:
Spiel mal ein bisschen mit den Timer Zeiten. Bei mir ist <30ms nicht drin, denn dann wird es langsam und es ruckelt. Spiel mal mit den Zeiten, dann siehst Du selbst mal die Unterschiede. //Und fluchen anfangen, das Windows so Plöd ist... :mrgreen:

Grüsse, Daniel :hi:

City Light 26. Okt 2002 13:11

Hi

also ich konnte nur bis 30ms gehen dann fängt es an langsam zu ruckeln

City Light 7. Nov 2002 10:30

Hi ich noch mal!

Ich hätte da noch eine frage zum schonen

Wie bekomme ich das Vorschau fenster sowie das fenster mit den Einstellungen(im Windows) in mein Schoner eingebaut http://www.quake4world.de/board/imag...ies/1zhelp.gif

Gruß Tino

sakura 7. Nov 2002 10:46

Im Borland Developer Network (BDN) gibt es hunderte Beispiele. Eines der Besten findest Du hier

http://community.borland.com/article...,26652,00.html

...:cat:...

MathiasH 7. Nov 2002 11:27

hey sakura sowas such ich seit Ewigkeiten, ich hab zwar schon einiges gefunden, aber diese Beispiele hatten immer irgendelche fatalen Bugs drin, wie z.b., dass man vom Vorschaufenster aus den Schoner nicht starten konnte ohne accessviolations zu bekommen :spin: :spin: :spin: , oder dass man das onlystartup selberschreiben musste :roll:

:arrow: echt kewl :!: danke Sakura

MathiasH

City Light 7. Nov 2002 11:57

Bin auch http://www.quake4world.de/board/imag...ies/dafuer.gif

Wo nach man lange suchten mußte, nun entlich gefunden, dank Dir!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 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