AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Etwas Bewegung in meine Programme?

Ein Thema von dust258 · begonnen am 21. Nov 2008 · letzter Beitrag vom 21. Nov 2008
Antwort Antwort
Seite 1 von 2  1 2      
dust258

Registriert seit: 18. Aug 2008
62 Beiträge
 
#1

Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 10:24
Ich habe vor einiger Zeit angefangen mich durch diverse Anfänger-Tutorials zu kämpfen und würde jetzt gerne ein wenig Bewegung in meine Programme bekommen. Also habe ich mir ein kleines Testprogramm geschrieben in dem ein Button einfach im Kreis wandert.

An sich funktioniert das ganz gut, nur kann ich das Programm nicht schließen, solange die Schleife läuft und es scheint mir auch ein wenig mehr Performance zu ziehen, als man vielleicht denken mag...

Mache ich was falsch oder bin ich mit meinem Ansatz einfach nur total auf dem Holzweg?



Bewegungstest.rar]Bewegungstest.rar

http://eit.total-latten.de/uploads/f...1_bewegung.jpg

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Bt1: TButton;
    Button2: TButton;
    Btst1: TButton;
    procedure Button2Click(Sender: TObject);
    procedure create(Sender: TObject);
    procedure Btst1Click(Sender: TObject);
    procedure Bt1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  stop:integer;
  i:Integer;
implementation

{$R *.dfm}


procedure TForm1.Bt1Click(Sender: TObject);
begin
if stop=0 then
begin
stop:=1;
end
else
begin
stop:=0;
end;
end;

procedure TForm1.Btst1Click(Sender: TObject);
begin
if stop=0 then
begin
stop:=1;
Btst1.Caption:=('Schleife an');
end
else
begin
stop:=0;
Btst1.Caption:=('Schleife aus');
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var xstart, ystart, xradius, yradius, aufloesung: Integer;
begin
repeat

  ystart:=100;
  xstart:=100;
  yradius:=100;
  xradius:=100;
  aufloesung:=100;

  bt1.Top:=round(ystart+xradius+(xradius*sin(i/aufloesung)));
  bt1.Left:=round(xstart+yradius+(yradius*cos(i/aufloesung)));


Application.ProcessMessages;
sleep(2);
until Stop=1;

Application.ProcessMessages;
end;
procedure TForm1.create(Sender: TObject);
begin
stop:=0;
end;

end.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#2

Re: Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 10:41
Moin, Moin.
Warum erfolgt die Bewegeung des Buttons im OnClick()???
Ich würde das in einen Timer packen und mit einem zusätzlichen Button den Timer ein-/aussschalten.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 10:43
Moin.

Ich denke, das Sleep ist vielleicht hier nicht ganz so glücklich. Dadurch wird sich die Anwendung "zäh" anfühlen.

Dann würde ich noch evtl. die Änderung der Position des Buttons (TOP und LEFT) mit einem LockWindowUpdate einrahmen.
Optimalerweise packst Du die Bewegung des Buttons selbst ein einen eigenen Thread, der nur für die Bewegung zuständig ist. Das ein- und ausschalten machst Du dann im Hauptthread.

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 10:45
Jepp, aber um einen Button zu bewegen erscheint mir ein Thread ein wenig "overdressed"
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 10:50
Zitat von taaktaak:
Jepp, aber um einen Button zu bewegen erscheint mir ein Thread ein wenig "overdressed"
Wenn die Bewegung des Buttons nur "Beiwerk" zum eigentlichen Programm ist, halte ich einen Thread absolut für das Mittel der Wahl. Wenn die Hauptaufgabe des Programms die Bewegung des Buttons ist, mag man darauf verzichten können, aber ich würde es trotzdem mit einem Thread machen. Ist einfach schöner und ich würde weniger Probleme erwarten, wenn man das Programm erweitert. Die Probleme können den Aufwand des gesparten Threads schnell auffressen.

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 10:51
Das Sleep ist da wohl das Problem. Versuch es wie taaktaak schon sagte mit einem Timer, dann brauchst du auch keine for-Schleife.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#7

Re: Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 10:59
Mein Ratschlag erfolgte vor diesem Hintergrund
Zitat:
angefangen mich durch diverse Anfänger-Tutorials zu kämpfen
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 11:04
Zitat von taaktaak:
Mein Ratschlag erfolgte vor diesem Hintergrund
Zitat:
angefangen mich durch diverse Anfänger-Tutorials zu kämpfen
Hast ja Recht. Wenn dust258 schnell ein Ergebnis sehen will, ist der Timer das Mittel der Wahl. Wenn er irgendwann mal den Wunsch verspürt, sich mit Threads zu beschäftigen, dann kann er ja mal das selbe Programm unter Verwendung einen Threads programmieren.

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
dust258

Registriert seit: 18. Aug 2008
62 Beiträge
 
#9

Re: Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 14:04
Danke erstmal, mit nem Timer läuft das wirklich besser (und wieder was gelernt ^^).

Nur wie bekomme ich es hin, das er über den Button aktiviert wird? Hatte folgenden Ansatz, aber sobald ich das Programm starte beginnt der Button schon sich zu bewegen...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Bt1: TButton;
    Button2: TButton;
    Timer1: TTimer;
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  i:Integer;
implementation

{$R *.dfm}



procedure TForm1.Button2Click(Sender: TObject);
begin
  Timer1.OnTimer(self);
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var xstart, ystart, xradius, yradius, aufloesung: Integer;
begin

  ystart:=100;
  xstart:=100;
  yradius:=100;
  xradius:=100;
  aufloesung:=100;

  i:=i+1;

  bt1.Top:=round(ystart+xradius+(xradius*sin(i/aufloesung)));
  bt1.Left:=round(xstart+yradius+(yradius*cos(i/aufloesung)));


end;

end.
  Mit Zitat antworten Zitat
Crazy Ivan
(Gast)

n/a Beiträge
 
#10

Re: Etwas Bewegung in meine Programme?

  Alt 21. Nov 2008, 14:08
einfach dem timer im OI oder im OnCreate der Form die Eigenschaft Enabled := False zuweisen und im Button Enabled := true
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 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