Autor Beitrag
crackm
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 25.05.08 10:55 
Also ich habe vollgendes Problem hoffe ihr könnt mir helfen.
Zum einem benutze ich die Funktion getcursorpos() die variable in den Klammern ist vom typ tpoint soweit alles ok, aber das ergebnis welches es liefert ist oder schein zumindes vollkommen willkürlich und ich würde ausßerdem gern die position im canvas bestimmen und nicht im ganzen Fenster. Hier die Funktion die ich benutze:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.TImage(Sender: TObject);
var
pt:tpoint;
begin
getcursorpos(pt);
//Worm.move(pt.X, pt.Y); <-- bewegung 
showmessage('The cursor pos. is: x='+inttostr(pt.x)+' y='+inttostr(pt.y));
end;


mit
ausblenden Delphi-Quelltext
1:
ImgWorld: TImage;					


zum anderem habe ich lange im netz gesucht und keine wirkliche möglichkeit gefunden, wie mann den Inhalt des Canvas löscht, deshalt habe ich eine Funktion geschriebne, die ein Weißes Viereck rüberzeichnet gibt eine bessere Alternative?

Und letztendlich bezieht sich die letzte Frage auf mein größtes Problem und zwar soll eine Figur in schritten sich bewegen, also würde es für den Syntax heißen malen, löschen, malen einen schritt weiter. Aber da es ja schritte sein sollten habe ich zu der funktion sleep gegriffen, die allerding bei Werten über 100 einfach hängt.
Hier die Vorwertsbewegung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
while x<>px do begin
        px:=px+10;
        hide();
        ahead.Draw(MyWorld, pr,px,py, pl);
        sleep(100);
        end;

Aber die schritte dabei sind nicht sichbar. Erhöht mann den Wert bei sleep tritt das oben genannte Problem ein.
x ist übrigens der Wert der position des Cursors im Canvas, wobei ich das auch schon manuell festzulegen versucht habe.
Über Ideen und vorschläge würde ich mich sehr freuen.

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 618
Erhaltene Danke: 368

W7
Delphi 6 pro
BeitragVerfasst: So 25.05.08 12:51 
Moin crackm,

für das Objekt TImage gibt es das Ereignis OnMouseMove
z.B. TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState;X,Y: Integer);

Das Löschen eines Canvas kannst du so machen, wobei Align auf alClient gesetzt ist
ausblenden Delphi-Quelltext
1:
2:
3:
Image1.Picture:=nil;
Image1.Width:=Form1.Width-8// sonst andere Werte
Image1.Height:=Form1.Height-57;


Für eine Warteschleife habe ich mir eine Delay-Funktion gebastelt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Delay(zeit:DWord);// Pausenzeit in Millisekunden
  var zeit1:DWord;
  begin
   zeit1:=GetTickCount;
   repeat Application.ProcessMessages until GetTickCount-zeit1>zeit
  end;

Gruß
Fiete

_________________
Fietes Gesetz: use your brain (THINK)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 25.05.08 13:04 
Moin!

Vorab: bitte stelle nur eine Frage pro Thread, da es sich gezeigt hat, dass mehrere Fragen in einem Topic für Verwirrung sorgen. :idea: Da deine Fragen sehr nah beieinander liegem und die Diskussion bereits begonnen hat, lasse ich das Topic mal offen. ;)

user profile iconcrackm hat folgendes geschrieben:
Und letztendlich bezieht sich die letzte Frage auf mein größtes Problem und zwar soll eine Figur in schritten sich bewegen,
Der Schlüssel zu einer "brauchbaren" Lösung dieses Problems heißt Suche in: Delphi-Forum, Delphi-Library TIMEBASED MOVEMENT. :idea:


user profile iconFiete hat folgendes geschrieben:
Für eine Warteschleife habe ich mir eine Delay-Funktion gebastelt:
Sieht man mal vom Un-Sinn des Wartens in ereignisorientierten Anwendungen ab :zwinker: dann solltest du besser einen "sauberen" Ansatz dafür verwenden. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
crackm Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 25.05.08 14:33 
@Narses: Danke schon mal für die Delay funktion funktioniert wunderbar.
Dennoch habe ich einige Fragen bezüglich dessen was Fiete vorgeschlagen hat, danke auch für deinen Beitrag.
Aber es scheint mir dass du mich falsch verstanden hast ich wollte nicht die Zeichenfläche löschen sondern den inhalt dieser. Die Funktion Image1.Picture:=nil; löscht aber die Zeichenfläche, dass dannach auch der inhalt weck ist ist mir schon klar aber die Zeichenfläche brauche ich noch.

Meine Frage bleibt d. h. wie löscht man den Inhalt des canvas?

Moderiert von user profile iconNarses: 2. Frage entfernt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 25.05.08 15:13 
Moin!

user profile iconcrackm hat folgendes geschrieben:
@Narses: Danke schon mal für die Delay funktion funktioniert wunderbar.
Ähm, du hast schon bemerkt, das die eigentliche Lösung für dein Problem nicht darin besteht, eine andere Warte-Funktion zu verwenden? :gruebel:

user profile iconcrackm hat folgendes geschrieben:
Meine Frage bleibt d. h. wie löscht man den Inhalt des canvas?
Schonmal in die Suche geschaut? ;) Suche in: Delphi-Forum, Delphi-Library TIMAGE LÖSCHEN

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
crackm Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 25.05.08 15:34 
Yup, suchen war keine Schlechte Idee. danke habe alles gefunden.