Autor |
Beitrag |
Tony-S
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: So 03.01.10 00:15
Hallo Forum, vor einem Jahr oder so, zur Weihnachtszeit haben wir uns in der Schule mal mit grafischen Spielereien in Delphi beschäftigt.
Bei mir entstand eine Art Bildschirmschoner, der es so aussehen lassen hat das es schneit.
Jetzt hab ich das auch mal auf anderen PC´s gestartet und musste feststellen, es ist viel zu langsam und resourcenfressend,
ich weiß nicht so recht, wie ich das ganze schneller oder effizienter schreiben könnte, so mal es auch ein bissl her ist:
Nach dem langen Vorwort poste ich einfache mal Textausschnitte, vllt gibt es ja andere Wege so etwas zu realisieren, bitte tipps  .
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var Form1 :TForm1; temp :tbitmap; x,y,u,v :array [0..2000] of single; grad :single; scl :array [0..2000] of byte; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.FormCreate(Sender: TObject); var i:word; begin
form1.canvas.create; form1.top := 0; form1.left := 0; form1.width := screen.width; form1.height := screen.Height;
temp := tbitmap.create; temp.width := form1.width; temp.height := form1.height; temp.pixelformat:= pf1bit;
for i := 0 to 2000 do begin x[i] := random(screen.width); y[i] := random(screen.height) - screen.height; u[i] := random(360); v[i] := (20 + random(50)) / 20; scl[i] := random(2) + 1; end; end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.Timer1Timer(Sender: TObject); var i:word; offset:single; begin
temp.canvas.brush.color := 0; temp.canvas.pen.color := 16777215; temp.canvas.fillrect (rect(0,0,screen.width,screen.height)); temp.canvas.brush.color := 16777215;
grad := grad + 3;
for i := 0 to 2000 do begin offset := sin(degtorad(grad+u[i])) * 5; y[i] := y[i] + v[i]; if y[i] > screen.height then y[i] := y[i] - screen.height; temp.canvas.fillrect (rect( round(x[i] + offset), round(y[i]), round(x[i] + scl[i] + offset), round(y[i] + scl[i])) ); end; form1.canvas.draw (0,0,temp); form1.top := not(form1.top); end; |
Vllt fällt ja jemandem was dazu ein 
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 03.01.10 15:27
Wie sieht es denn aus? Transparentes Formular, sodass es auf dem Desktop schneit, oder schwarzer Grund oder sowas? Und das mit dem temporären Bitmap würde ich versuchen zu umgehen. Warum nutzt du das denn? Eigentlich müsstest du doch alles auch direkt auf den Canvas zeichnen können. Und wenn es schneller schneien soll, erhöhe doch einfach die Schrittweite.
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: So 03.01.10 16:02
du kannst auch einfach direkt auf den Desktop zeichnen :
Delphi-Quelltext 1: 2: 3: 4:
| c := TCanvas.Create; c.Handle := getDC(0);
c.TextOut(200,200,'runs'); |
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 03.01.10 16:12
|
|
Tony-S 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: So 03.01.10 22:36
FinnO hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4:
| c := TCanvas.Create; c.Handle := getDC(0);
c.TextOut(200,200,'runs'); | |
Also x und y ist ja sicher der Startpunkt ab wo gezeichnet werden soll, ja?
Aber was für einen Vorteil hat das ganze denn?
Zu Jaenicke, du hast recht in einigen Punkten ^^.
Aber 6%?! Also ich hab n X26000+ mit 3 GHz am laufen und n Quadcore auf Arbeit hatte auch gut zu tun damit,
bei mir ist der Timer auf 10 ms und ich hab eine Auslatung von 1-5% aaaaber dwm.exe = Desktopfenster-Manager schnellt auf 30% hoch (von vorher 1%),
das hab ich vorher nicht beachtet, weiß nicht ob es die exe auch unter xp gibt..
Moderiert von Narses: Zitat kenntlich gemacht.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 03.01.10 22:54
Tony-S hat folgendes geschrieben : | Desktopfenster-Manager schnellt auf 30% hoch (von vorher 1%),
das hab ich vorher nicht beachtet, weiß nicht ob es die exe auch unter xp gibt.. |
Den gibts erst ab Vista und ist genau eines der Probleme was die gefühlte geringere Geschwindigkeit von Vista angeht.
10 Millisekunden kannst du dir schenken, weniger als 15ms geht mit dem normalen Timer praktisch nicht und das auch nur mit Glück. Mit 30ms sieht es bei mir gut aus, wenn es mehr sein soll würde ich eine echte 2D Engine wie Andorra empfehlen.
|
|
|