Form animieren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Form animieren

Beitrag von flashkid »

Hallo :)

Ich versuche derzeit mein Form grafisch ein wenig aufzupeppen :) Dazu habe ich diese Procedure ausprobiert:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var p: Integer;
begin
   for p:=1 to 100 do begin
      form1.Left := Form1.left -5;
      Sleep(1);
   end;
end;

Leider sieht das nicht sehr schön aus und geht auch ein wenig langsam. Ohne das Sleep ist es rasend schnell :D
Gibt es hierfür nicht schon eine Funktion? Ich kenne den DLLCall "AnimateWindow", weiß aber nicht wie man ihn in Free Pascal umsetzen kann :(

Gruß, flashkid

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Form animieren

Beitrag von Euklid »

Hallo,

eventuell hilft Dir dieser Link weiter: http://forum.lazarus.freepascal.org/ind ... pic=6394.0
Die meisten Windows-API-Befehle sind über die unit windows recht einfach erreichbar. Bei AnimateWindow bin ich mir nicht so sicher...

Gruß, Euklid

flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Re: Form animieren

Beitrag von flashkid »

Diesen Beitrag habe ich auch schon gelesen, nur verstehe ich nicht, was nun noch an diesem Delphi-Code geändert werden muss, damit es funktioniert.
Habe es auch einfach mal mit "AnimateWindow(Form1.handle,1000,0x20001)" versucht, nur leider wird AnimateWindow nicht als Befehl erkannt, obwohl ich unter uses Windows eingetragen habe.

Wie animiert ihr denn eure Forms, oder macht ihr das gar nicht?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Form animieren

Beitrag von Socke »

flashkid hat geschrieben:Diesen Beitrag habe ich auch schon gelesen, nur verstehe ich nicht, was nun noch an diesem Delphi-Code geändert werden muss, damit es funktioniert.
Habe es auch einfach mal mit "AnimateWindow(Form1.handle,1000,0x20001)" versucht, nur leider wird AnimateWindow nicht als Befehl erkannt, obwohl ich unter uses Windows eingetragen habe.

Versuchs mal mit der jwawinusers.pas. Da ist zumindest eine entsprechende Funktion deklariert.
flashkid hat geschrieben:Wie animiert ihr denn eure Forms, oder macht ihr das gar nicht?

Ich benutze dafür den Benutzer :P
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Form animieren

Beitrag von theo »

flashkid hat geschrieben:Wie animiert ihr denn eure Forms, oder macht ihr das gar nicht?


Gar nicht. Wozu?

flashkid
Beiträge: 35
Registriert: So 14. Feb 2010, 18:15

Re: Form animieren

Beitrag von flashkid »

Danke, nun geht der Befehl schon mal :) Ich bekomme ihn aber nicht ans Laufen :( Habe "AnimateWindow(Form1.Handle,1000,AW_Hide)" benutzt.. Die Funktion gibt auch immer 0 zurück, was bedeutet, dass die Funktion fehlgeschlagen ist. Wie komme ich an den genauen Fehler heran? Auf der msdn Seite steht "To get extended error information, call the GetLastError function.", wie funktioniert das in Lazarus?

Socke hat geschrieben:Ich benutze dafür den Benutzer :P
"Um das Fenster von links nach rechts sliden zu lassen, klicken Sie bitte auf die Titelleiste und ziehen Sie das Fenster nach rechts" :D
theo hat geschrieben:Gar nicht. Wozu?
Um das Programm grafisch ein wenig schöner zu gestalten? Gerade für Vorführungen ist das gut geeignet.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Form animieren

Beitrag von Socke »

flashkid hat geschrieben:Auf der msdn Seite steht "To get extended error information, call the GetLastError function.", wie funktioniert das in Lazarus?

Ganz einfach: Du rufst GetLastError() auf. Diese Funktion sollte dann aber wirklich in der unit Windows liegen. Das schöne an Microsoft ist, dass du noch eine weitere Funktion (deren Name mir entfallen ist) aufrufen musst um den Fehlercode in einen brauchbaren String umzusetzen (alternativ kann den Fehlercode auch im Internet suchen).

flashkid hat geschrieben:
Socke hat geschrieben:Ich benutze dafür den Benutzer :P
"Um das Fenster von links nach rechts sliden zu lassen, klicken Sie bitte auf die Titelleiste und ziehen Sie das Fenster nach rechts" :D
theo hat geschrieben:Gar nicht. Wozu?
Um das Programm grafisch ein wenig schöner zu gestalten? Gerade für Vorführungen ist das gut geeignet.

So in etwa.
Windows XP (und die Nachfolger auch) sind meiner Meinung nach nicht gerade schön. Deshalb benutze ich auch GTK2 unter Linux. Hier ist es wesentlich einfacher das Aussehen der Fenster seinen Wünschen anzupassen (Farbgebung Icons), da es zahllose Icons und Themes schon fertig gibt. Unter Windows gibt es nur einen (nicht wirklich einfachen) Dialog zum Festlegen der Farben (aber nur im Pre-XP-Style).
Wenn ein Programm sein Aussehen dann selbstständig ändert, hebt es sich dadurch immer automatisch von allen ab. Damit es dann noch gut aussieht bedarf es einen Grafiker (der oft nicht in Personalunion mit dem Programmierer ist). Und selbst dann bleibt oft die Benutzerfreundlichkeit durch Widererkennung ähnlicher Elemente auf der Strecke.

Bei welcher Vorführung müsste ich denn das Fenster verschieben?

Edit: Das Ergebnis von GetLastError kannst du entweder mit FormatMessage() in einen String umwandeln oder bei MSDN direkt nachlesen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten