AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte PfannkuPlus - Mein erstes Programm
Thema durchsuchen
Ansicht
Themen-Optionen

PfannkuPlus - Mein erstes Programm

Ein Thema von nezumi · begonnen am 25. Apr 2006 · letzter Beitrag vom 28. Apr 2006
 
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: PfannkuPlus - Mein erstes Programm

  Alt 26. Apr 2006, 13:04
Hallo,

nettes Tool und sehr interessant, auf was für Gedanken manche kommen (das mit der versteckten Scrollbar, schon faszinierend, wenn auch sehr schlecht gelöst).

Du wirst dich mit der Rekursion noch nicht beschäftigt haben (Funktion/Prozedur, die sich selbst aufruft), doch damit kann man das sehr schön lösen. In den Stack (so eine Art Zwischenspeicher), werden die Werte für die Formularposition geschrieben und am Ende wieder rückwärts abgearbeitet, womit das Formular am Ende wieder vollautomatisch in die Ursprungsposition zurück gelangt.

Falls es dich interessiert, das kann man so lösen (ganz ohne Timer):

Delphi-Quellcode:
// Ersatz für sleep(), nur dass die Anwendung nicht einfriert
// Code ist aus der Code-Library
procedure Delay(Milliseconds: Integer);
var
  Tick: DWord;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWord(Milliseconds);
    while (Milliseconds > 0) and
          (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      if Application.Terminated then Exit;
      Milliseconds := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;

// eigentliche rekursive Prozedur
procedure MoveForm(FLeft, FTop, Count: Integer);
begin
  if Count > 0 then
  begin
    // "Random(9) - 4" erzeugt einen Zufallswert zwischen -4 und 4
    MoveForm(
      Form1.Left + Random(9) - 4,
      Form1.Top + Random(9) - 4,
      Count - 1);
  end;

  Form1.Left := FLeft;
  Form1.Top := FTop;
  Delay(50);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MoveForm(Left, Top, 20);
end;
Die Prozedur Delay ist, wie im Kommentar erwähnt, dazu da, um die Funktion Delphi-Referenz durchsuchenSleep zu ersetzen, da Sleep die ganze Anwendung einfriert. Delay pausiert den Programmablauf (hier für 50 Millisekunden). Die "Rüttelprozedur" ist die zweite. Du siehst, das ist richtig schön kurz und sauber gelöst. Im OnCreate der Form kannst du auch "Randomize" aufrufen, damit das Rütteln nicht immer das gleiche ist, doch ist dies in dem Falle ja eigentlich egal. Mit dem 3. Parameter (Count) kannst du die Dauer des Rüttelns festlegen.

Falls du verständnisfragen dazu hast, kannst du sie gerne stellen. Mit versteckten Komponenten zu "spielen" ist nicht schön.
  Mit Zitat antworten Zitat
 


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 02:16 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 by Thomas Breitkreuz