Autor Beitrag
Jason07
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 27.05.11 23:07 
Hi leute ich schreibe gerade ein Progamm, was einen Bubblesort dreidimensional animieren soll. Ich greife bei diesem Programm nicht auf Directx zurück, da dieses auch für meine Klassenkameraden verständlich sein sollte, da haben wir Canvas im Unterricht lediglich kurz angerissen haben.
Ich habe nun Matritzen, Vektoren, einen virtuelln Buffer und Rastesizer und eine TransformationsPipeline implementiert. Nun wäre es an der Zeit die Main Funktion zu schreiben. Diese soll aus einen repeat until Schleife bestehen, die das ganze Programm bis zum Ende durchläuft. Nun habe ich das Problem, dass ich keine Ahnung habe wo ich diese Funktion implementieren soll. Sie in die Ereignisse OnCreat oder OnActivate zu packen ist sinnlos, dann würde das Programm nichteinmal starten. Gibt es eine Funktion, die genau dann startet, wenn die Form1.Create Funktion abgeschlossen ist oder muss ich dann doch wieder auf den guten alten Button zurück greifen?
Bin gespannt auf eure Vorschläge. :)


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 27.05.2011 um 23:46
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 27.05.11 23:51 
Moin!

user profile iconJason07 hat folgendes geschrieben Zum zitierten Posting springen:
Nun wäre es an der Zeit die Main Funktion zu schreiben. Diese soll aus einen repeat until Schleife bestehen, die das ganze Programm bis zum Ende durchläuft.
Da bist du mit einer VCL-Windows-Anwendung im falschen Film. :nixweiss: Die arbeiten ereignisorientiert. :idea:

Dein Konzept ist für eine Konsolenanwendung geeignet. :?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Fr 27.05.11 23:55 
Wenn du es aber trotzdem mit einer Form machen willst, nimm das OnShow Event.

lg
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 28.05.11 00:36 
Moin!

user profile iconJason07 hat folgendes geschrieben Zum zitierten Posting springen:
Diese soll aus einen repeat until Schleife bestehen, die das ganze Programm bis zum Ende durchläuft.
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du es aber trotzdem mit einer Form machen willst, nimm das OnShow Event.
Eine VCL-Anwendung ist für eine eigene MessageLoop - wie es der Threadersteller ausdrücklich gewünscht hat - nicht praktikabel. Was soll passieren, wenn die Schleife (=Programm) fertig ist? Dann startet ja die VCL-Anwendung eigentlich erst... :roll: Um in der Logik deines Tipp zu bleiben: am besten mit Halt; abbrechen, oder was?! :nut:

Mir fällt nicht mal eine gute Analogie ein, um den Unsinn eines solchen Ansatzes zu verdeutlichen, so schräg ist das... :gruebel:

Entweder VCL und dann ereignisorientiert oder nonVCL. :|

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Sa 28.05.11 02:52 
Hey,

pack dir nen Timer auf deine Form, und schreib da dein Code rein. Den Timer kannst du dann im OnCreate aktivieren. In jedem Timeraufruf kannst du dann dein Array einen Schritt sortieren und danach zeichnen. Die Timer-Methode ist dann praktisch der Schleifenrumpf deiner repeat-until-Schleife. Das schöne daran ist, dass du die Geschwindigkeit später über das Timer-Intervall einstellen kannst. Eins frag ich mich aber noch: wie will man das BubbleSort-Verfahren dreidimmensional darstellen? Paar einfache Striche, die den Wert des Array-Elements anzeigen reichen doch vollkommen aus?!

user profile iconJason07 hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe nun Matritzen, Vektoren, einen virtuelln Buffer und Rastesizer und eine TransformationsPipeline implementiert.
Und das ist jetz einfacher für deine Klassenkameraden? Da kannst du ihn auch gleich beibringen, wie man mit DirectX arbeitet...

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Jason07 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 28.05.11 16:08 
Hi leute,
danke für die vielen Antworten. Eine Konsolenanwendung kommt für mich nicht in frage, da ich mich ersten in Delphi damit noch nicht befasst habe und zweitens soll es wie oben schon erwähnt für meine Klassenkameraden nachvollziebar sein und wir hatten im Unterricht eben nur VCL Anwendungen. Ich werd dann wohl die Methode mit dem Timer ausprobieren, darüber hab ich noch garnicht nachgedacht.
@ Bergamann89 Ich programmiere das Programm nicht weil es sinnvoll sein soll, sondern weil ich eifnach mal ausprobieren will was man mit ein bisschen oberstufen Mathematik und unseren wenigen Kenntnissen auf dem InfoGK so machen kann. Ich stell mir die Visualisierung so vor:
Im zentrum vom Bildschrim soll ein Stapel aus 10 Karten liegen, der dann gemischt wird. Die Karten bekommen nun eine Position auf einem Halbkreis zugewiesen und sollen dort hinfliegen, indem sie verschiedene Drehungen und Verschiebungen durchlaufen. Nun sind die Karten auf dem Halbkreis aufgefächert, aber noch unsortiert. Schließlich kommt der Buublesort ins spiel dem man dann in ruhe beim Tauschen und Vergleichen der Karten zugucken kann.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 28.05.11 16:28 
Also ich würde ja mal TApplication.OnIdle in die Runde werfen. Ist für Grafik-Anwendungen, wie sie vom Thread Opener geplant sind i.d.R. die günstigste Vorgehensweise. Zu beachten ist dabei lediglich, dass die Repeat/Until-Konstruktion von der Anwendung kommt, man selber also nur den Schleifeninhalt bauen muss.

Ansonsten schließe ich mich user profile iconNarses aber an: VCL-Anwendungen sind ereignis-orientiert und daher sollte man das auch immer so programmieren!

@user profile iconHenryHux: FormShow ist hier äußerst ungünstig, weil die Anwendung dann nicht mehr sinnvoll reagiert und man damit die VCL vollständig umgeht.

@user profile iconNarses: Als Analogie hätte ich Nach dem Rumdrehen des Zündschlüssels vom Auto das Auto ans Ziel schieben, bevor man den Motor sein Werk verrichten lässt.

Die im Thread erwähnte Möglichkeit über den Timer ist aber IMHO für den Anwendungsfall die geeignetste Methode, wenn es darum geht, dass andere den Kot verstehen sollen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Erichgue
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 86

Win XP/2000/7
TurboPacal 7.0; Delphi 2/5/7; BDS 2006/2010/XE6; C#; MSSQl 2000
BeitragVerfasst: Fr 24.06.11 16:40 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
Const
   wm_AfterShow = wm_App + 1000;

   TForm3 = Class(TForm)
     Procedure FormShow(Sender: TObject);
     Procedure wmAfterShow(Var Message : TMessage); message wm_AfterShow;
   private
   public
   end;

procedure TForm3.FormShow(Sender: TObject);
begin
  PostMessage(Handle, AfterShow ,0 ,0); 
end;

Procedure TForm3.wmAfterShow(Var Message : TMessage) message wm_AfterShow;
begin
  // mach was, nach dem das Formular vollständig angezeigt wurde
end;