Autor Beitrag
nepleurepas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

Win XP

BeitragVerfasst: Mo 16.04.07 00:23 
Hallo,
mache ein Programm dass Sternkarten aus gegeben Daten berechnet und graphisch darstellt. Habe dazu ein paar Proceduren gemacht, die exelfiles auslesen und dann mit TCanvas zeichnet. Soweit so gut, alles funktioniert. Nun wollte ich das Ganze animiert machen, d.h. dass das Program nacheinander versch Excelfiles (die die Sternstände zu versch. zeiten beinhalten) "durchmacht" . dadurch soll man dann sehen wie sich die sterne auf der Karte bewegen. Das Programm läuft, nur ließt er der reihe nach alle files aus und zeigt mir nur die letzte Karte an. Hab dann noch n paar experimente gemacht, und bin zu dem schluss gekommen, dass Delphi erst alle anderen Vorgänge ausführt, und dann ganz zu schluss den letzten Canvaszustand zeichnet. Kann mir da vllt jemand helfen, wie ich die Grafiken immer dann zeichnen lassen kann, wenn ich es im quelltext so vorsehe?

Viele dank für Antworten.


gruß Stefan
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mo 16.04.07 00:29 
Ich muss gleich weinen, auch wenn ich das deinem Namen nach nicht tun soll, denn du hättest das auch etwas verständlicher erklären können ;)


So, ich verstehe deine Ausführungen nicht so wirklich. Ich denke ohne Quellcode wird man dir da nicht helfen können.

Allgemein gilt in so einem Fall: Du hast doch irgendeine Procedure die dann deine Daten zeichnet. Und wenn du willst das gezeichnet werden soll rufst du die ganz einfach auf :?:

Wie gesagt...Quellcode oder verständlich schreiben.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 16.04.07 00:45 
Legt beschwörend seine Hände auf die Code-Kristallkugel
Ich sehe .. ich sehe ...!
Application.ProcessMessages; ! :flehan:
Also. Das ist mal das erste, was mir so einfällt. Wenn du eine lange Prozedur hast (vielleicht noch mit sleep drin), und in ihr eine Animation darstellen willst, so dass mehrere Bilder nacheinander angezeigt/gezeichnet werden, dann wird die Prozedur erst durchlaufen, bis weitere Nachrichten verarbeitet werden bzw. bis etwas gezeichnet wird. Ich denke, was helfen würde, ist folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Procedure ZeichneAlles;
begin
    Image1.Canvas.Lineto(1010);
    Application.ProcessMessages; //Heißt soviel wie "Verarbeite Nachrichten" ;)
    sleep(1000);

    Image1.Canvas.Lineto(2020);
    Application.ProcessMessages;
    sleep(1000);

    Image1.Canvas.Lineto(3030);
    Application.ProcessMessages;
    {...etc}
end;

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.


Zuletzt bearbeitet von JayEff am Mo 16.04.07 00:49, insgesamt 1-mal bearbeitet
nepleurepas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

Win XP

BeitragVerfasst: Mo 16.04.07 00:45 
user profile iconKarlson hat folgendes geschrieben:
Ich muss gleich weinen, auch wenn ich das deinem Namen nach nicht tun soll, denn du hättest das auch etwas verständlicher erklären können ;)


So, ich verstehe deine Ausführungen nicht so wirklich. Ich denke ohne Quellcode wird man dir da nicht helfen können.

Allgemein gilt in so einem Fall: Du hast doch irgendeine Procedure die dann deine Daten zeichnet. Und wenn du willst das gezeichnet werden soll rufst du die ganz einfach auf :?:

Wie gesagt...Quellcode oder verständlich schreiben.


Also die Procedure "lesetabelle" ließt die exceltablle aus übergibt jeweils ein x und y Koordinate an die Procedure "zeichnestern".

Die Procedure "lesetabelle" wird von der Procedure "Animation " aufgerufen, die nacheinander versch. excelfiles öffnet.

Hoffe nun ist es einigermaßen verständlich. Das programm läuft, das Problem is nur, dass bis das letzte excelfile ausgelesen wird garnichts gezeichnet wird. erst danach und dann alles auf einmal.

Gruß Stefan
ok, hier der quellcode:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
procedure animation(filename: string);
var episode, episodenanzahl, laengepfad: integer;
var lfdnr, pfad: string;
begin
pfad:= filename;
episodenanzahl:= 8 ;
episode:= 1;
laengepfad:= length(pfad);
lfdnr:= '1';

while (episode<(episodenanzahl+1)) do
begin
  pfad[laengepfad-4]:= lfdnr[1];
  print1u.Xls_To_StringGrid(form1.stringgrid1, pfad);
  print1u.lesetabelle(form1.stringgrid1);
  episode:= episode+1;
  lfdnr:= inttostr(episode);
  sleep(1000);
end;
form1.Edit2.Text:= pfad;


procedure zeichnestern(x,y: real);
var px, py, dicke: integer;
var farbe: Tcolor;

begin

  dicke:= strtoint(form1.edit3.text);
  farbe:= form1.colorbox1.selected;
  form2.Image1.canvas.brush.Color:= farbe;
  form2.Image1.canvas.Pen.Color:= farbe;
  px:= umrechnen(x);
  py:= umrechnen(y);

  form2.Image1.Canvas.roundrect(px-dicke,py-dicke,px+dicke,py+dicke,100,100);
  form2.edit1.text:= inttostr(px);
  form2.edit2.text:= inttostr(py);


Zuletzt bearbeitet von nepleurepas am Mo 16.04.07 00:53, insgesamt 1-mal bearbeitet
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 16.04.07 00:47 
Das Delphiforum hat eine geniale Funktion, die deinen Quellcode wunderschön formatiert ausgibt, mit Syntaxhighlighting, fettgedruckten Schlüsselwörtern und sämtlichen Absätzen, die in deinem Code sind. Diese Funktion lässt sich einfach nutzen, in dem du deinen Code mit Delphi-Tags umschließt, etwa so: <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG272063684bf8fb22ed995633a1647a14}</span></span>! :mahn:

Auf diese Weise ersparst du unseren lieben Mods viel Arbeit und ausserdem werden dir die anderen Delphianer gerner helfen, zumal dein Code wesentlich leserlicher ist!

Bitte ändere das doch einfach, in dem du die user defined image-Taste (bzw. für den Inline-Editor, falls im Profil AJAX aktiviert ist, die user defined image-Taste) rechts neben deinem Beitrag benutzt.

Alles weitere steht ja in meinem letzten Post ;)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
nepleurepas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

Win XP

BeitragVerfasst: Mo 16.04.07 00:56 
user profile iconJayEff hat folgendes geschrieben:
Das Delphiforum hat eine geniale Funktion, die deinen Quellcode wunderschön formatiert ausgibt, mit Syntaxhighlighting, fettgedruckten Schlüsselwörtern und sämtlichen Absätzen, die in deinem Code sind. Diese Funktion lässt sich einfach nutzen, in dem du deinen Code mit Delphi-Tags umschließt, etwa so: <span class="inlineSyntax"><span class="codecomment">{PROTECTTAGf99c72bdb1c799d69801de0caeb3598d}</span></span>! :mahn:

Auf diese Weise ersparst du unseren lieben Mods viel Arbeit und ausserdem werden dir die anderen Delphianer gerner helfen, zumal dein Code wesentlich leserlicher ist!

Bitte ändere das doch einfach, in dem du die user defined image-Taste (bzw. für den Inline-Editor, falls im Profil AJAX aktiviert ist, die user defined image-Taste) rechts neben deinem Beitrag benutzt.

Alles weitere steht ja in meinem letzten Post ;)



danke für den Tip mit "Application.ProcessMessages" Denke so funktiuniert es.

gruß Stefan
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 16.04.07 00:59 
user profile iconnepleurepas hat folgendes geschrieben:
Denke so funktiuniert es.

Wenn's denn so funktioniert, markierst du dann das Thema entsrechend? Unter dem letzten Beitrag ist ein Link, ein großes HIER... ;)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.