![]() |
Fenster bewegen
Wie kann man erreichen, dass sich ein Fenster bewegt?
Das Fenster soll sich durch einen Timer gesteuert, an eine zufällig bestimmte Position bewegen. Thx! MfG Florian |
Kuck dir mal die Eigenschaften Left und Top von TForm an.
|
Ich weiss, dass in dem Buch: "Delphi 6 Grundlagen und Profiwissen" die erste Übung ist, ein Programm zu schreiben bei dem folgendes passiert:
Man nehme eine Form, platziere einen Button auf ihr, nenne ihn Beenden und schreibe dann die OnMouseMove Prozedur. In der steht, dass sich das Fenster an eine zufällige Position bewegt, wenn man mit der Maus über oder an den Buttonrand fährt. Hat irgendwer das Buch und könnte den Code mal posten? Der funktioniert nämlich. Thx! MfG Florian |
Ich hab das mal selber probiert:
Delphi-Quellcode:
Hat nicht so toll funktioniert. Meine Form ist immer oben links hängen geblieben oder ganz vom Bildschirm verschwunden. Das klappt also nicht.
begin
Form1.Top:= random(1000); Form1.Left:= random(1000); end; hm... Vielleicht könnte es funktionieren, wenn man den Wert in der Klammer ändert. Aber auf welchen Wert? Auf keinen Fall darf das Fenster den sichtbaren Bereich des Bildschirms verlassen. Es soll so schön rumspringen wie das hier: ![]() Thx im Voraus! MfG Florian |
da gibts was, was die höhe und breite des desktops angibt, aber weiss net wies geht, probier doch einfach die werte in den klammern entsprechend kleiner zu machen!
gruss haegar |
In einem VCL-Projekt gibts die Bildschirmgrröße unter Screen.DesktopWidth bzw. Screen.DesktopHeight
|
Setz mal für 1000 entsprechend die Höe und Breite des Bildschirmes ein: Screen.Width und Screen.Height.
|
Zitat:
musst also noch die höhe und breite des formulars abziehen...
Delphi-Quellcode:
so das sollte es eigentlich sein
form.left:=random(screen.width-form.width);
form.top:=random(screen.height-form.height); gruss haegar |
Zitat:
Delphi-Quellcode:
Grüsse, Daniel :hi:
Button1.Left := Random(Form1.ClientWidth - Button1.Width);
Button1.Top := Random(Form1.ClientHeight - Button1.Height); |
Genau das hab ich gesucht :!: Wenn ich zuhause bin probier ich das aus. :bouncing4: :bounce1: :bounce2:
thx! MfG Florian |
Ich hab den Code von Daniel genommen, aber das einzige was passiert ist, dass meine Form oben links in die Ecke spring. Das ist nicht schön! :-(
Sie kommt da nämlich nicht mehr weg. Weitere Hilfe erbeten! Thx! MfG Florian |
Hallo Jungs (und evtl. Mädels)
Habt Ihr mal versucht, vor dem Aufruf der random Funktion die Initialisierung mit
Delphi-Quellcode:
aufzurufen.
Randomize;
Gruß, Tom |
Also bei mir funktioniert es anstandlos
Delphi-Quellcode:
Gruß, Tom
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin // Achtung: Timer1.Enabled=False; Timer1.Enabled:=True; end; procedure TForm1.FormCreate(Sender: TObject); begin Randomize; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Left := Random(Screen.Width-Width); Top := Random(Screen.Height-Height); end; end. |
Ich hab da mal ein Randomize; vorgesetzt aber das zeigt keinen Effekt.
Delphi-Quellcode:
Das ist der Code der OnMouseMove Prozedur meiner Form. Sie springt immer nach links oben in die Ecke.
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin Randomize; Form1.Top:= random(Form1.ClientHeight - Form1.Height); Form1.Left:= random(Form1.ClientWidth - Form1.Width); end; Vielleicht könnte man auch etwas anderes machen: Form bewegt sich von links unten nach rechts oben, von da nach rechts unten und dann nach links oben, bewegt sich nach links unten und fängt von vorne an. Mit Schleifen und Bedingungen, oder so??? Thx! MfG Florian |
Zitat:
an, und vergleiche die mal mit den ganzen hier geposteten codes!! gruss haegar |
Hallo Flomei,
Deine Funktion z.B.
Delphi-Quellcode:
liefert immer den gleichen Wert (+-1) bis auf das Vorzeichen.
Random(Form1.ClientHeight - Form1.Height);
Ich hab mir mal die Werte ausgeben lassen:
Delphi-Quellcode:
Diese Werte erhalte ich nur, wenn
LEFT: -32768TOP : 32767
LEFT: 32767TOP : -32768 LEFT: -32768TOP : 32767 LEFT: -32768TOP : -32768 LEFT: 32767TOP : -32768 LEFT: 32767TOP : -32768 LEFT: 32767TOP : -32768 LEFT: 32767TOP : -32768 LEFT: 32767TOP : -32768 LEFT: 32767TOP : -32768 LEFT: 32767TOP : 32767 LEFT: 32767TOP : -32768 LEFT: 32767TOP : -32768 LEFT: 32767TOP : 32767
Delphi-Quellcode:
ist. Wenn Du aber
Form1.Borderstyle:=bsSingle;
Delphi-Quellcode:
eingestellt hast, bekomme ich nur Null. Das erklärt a) bsSingle: warum Deine Form zur Laufzeit verschwindet; und b) bsNone: warum Deine Form oben links in der Ecke plaziert ist.
Form1.Borderstyle:=bsNone;
Gruß, Tom |
Ist doch ganmz simple: ClientHeight ist die Höhe des Client-Bereiches des Fensters und Height die gesamt Höhe.
|
Zitat:
Wo liegt denn jetzt der Fehler? Thx! MfG Florian |
Prima! Es geht jetzt! Manchmal ist geposteter Code doch am besten. :wink:
Thx! MfG Florian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz