Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Befehl zum pausieren (https://www.delphipraxis.net/154940-befehl-zum-pausieren.html)

Mesion 1. Okt 2010 19:07

Delphi-Version: 7

Befehl zum pausieren
 
Guten Tag,
ich hoffe, dass ich hier in das richtige Unterforum schreibe, wenn nicht, dann tut es mir Leid.

Seit ein paar Wochen habe ich nun Informatik in der Schule und als Hausaufgabe sollen wir ein Paintprogramm mit 8 Funktionen programmieren.
Für besondere Funktionen gibt es Pluspunkte.

Ich habe mir nun überlegt eine Funktion zu machen bei der ein ausgefüllter Kreis gezeichnet wird, der immer größer wird, je länger die Maus gedrückt wurde.
Das untere ist dabei herrausgekommen und es funktioniert auch, aber der Kreis vergrößert sich zu schnell, deswegen suche ich nach einem Befehl den ich in die If-Verzweigung bauen kann, der sozusagen die Zeit kurz stehen lässt, sodass die Schleife zum Beispiel 0,1 Sekunden eine Pause einlegt.

Es wäre sehr nett, wenn mir vielleicht jemand helfen könnte.

Mit freundlichen Grüßen
Mesion

Delphi-Quellcode:
                  repeat

                  If dieMaus.istGedrueckt = false then
                  begin
                  hposition2:=0;
                  meinStift.bewegeBis(dieMaus.hPosition,dieMaus.vPosition);
                  end;

                  If dieMaus.istGedrueckt = true then
                  begin
                  meinStift.bewegeBis(meinStift.hPosition,meinStift.vPosition);
                  hposition2:=(hposition2+1);
                  meinStift.zeichneKreis(1+hposition2);
                  end;

                  until
                  dieMaus.doppelklick;
[EDIT]Delphi-Tags eingefügt. Bitte künftig selber machen. Danke. MfG. Christian Seehase[/EDIT]

Klaus01 1. Okt 2010 20:59

AW: Befehl zum pausieren
 
Delphi-Quellcode:
repeat
  If not dieMaus.istGedrueckt {= false} then
    begin
      hposition2:=0;
      meinStift.bewegeBis(dieMaus.hPosition,dieMaus.vPosition);
    end{;}
  else
  {If dieMaus.istGedrueckt then}
    begin
      meinStift.bewegeBis(meinStift.hPosition,meinStift.vPosition);
      hposition2:=(hposition2+1);
      meinStift.zeichneKreis(1+hposition2);
    end;
         
  sleep(150); // oder besser delay aus der Codelib nehmen
until dieMaus.doppelklick;
Grüße
Klaus

Mesion 1. Okt 2010 21:27

AW: Befehl zum pausieren
 
Vielen Dank für deine Antwort.

Wenn ich das mit sleep mache, dann steht da Undefinierter Bezeichner, muss ich den Befehl eventuell auf Deutsch benutzen?
Schlafen, Ruhen und Pausieren habe ich aber schon ausprobiert ^^

Satty67 1. Okt 2010 21:38

AW: Befehl zum pausieren
 
Nein, die Funktion wird so geschrieben.

Du hast deine Zeichenfunktionen wahrscheinlich in einer extra Unit. Da wird nicht der Standard-Satz externer Units eingetragen.

In der Unit, in welcher Du sleep() verwenden willst, in die uses Liste Windows mit aufnehmen (uses im Quelltext suchen).

Tipp:
Cursor über geschriebenes sleep(), dann F1. In dem Hilfetext steht auch immer die externe Unit, in der die Funktion/Procedure etc. definiert ist. Natürlich nur wenn es ein bekannter Bezeichner ist.

Luckie 1. Okt 2010 21:38

AW: Befehl zum pausieren
 
Sollte eigentlich in der Windows.pas deklariert sein. Hast du die Unit unter uses eingebunden?

Aber sag mal, mit was für einer VCL programmiert ihr da in der Schule, da da ja irgendwie alles auf deutsch ist.

Satty67 1. Okt 2010 21:48

AW: Befehl zum pausieren
 
Sieht mir eher nach einer teilweise deutschsprachigen Komponenten/Objekt-Sammlung zum Zecihnen aus.

Mesion 2. Okt 2010 16:47

AW: Befehl zum pausieren
 
Guten Tag,
vielen Dank für die zahlreichen Antworten.
Wir arbeiten mit Stifte und Mäuse Version 2.4

Ihr habt Recht und der Befehl wurde umgenannt.
Er heisst "warte()".
Ich habe aber schon wieder ein Problem.
Ich soll ja 8 Funktionen schreiben und die meisten habe ich jetzt auch schon, aber sie lassen sich irgendwie nicht ineinanderfügen.
Alleine funktionieren sie aber einwandfrei.
Ich glaube das Problem hat mit der Tastatur zu tun.

In der Schule hatten wir schon 2 Funktionen in einem Programm: Malen und Radieren.
Ich habe nach dem gleichen Schema dann noch 3 Funktionen von mir eingefügt.
Kreise die immer größer werden, je länger man drückt.
Das gleiche nochmal mit Rechtecken und dann noch Linien zeichnen.


Es wäre echt nett wenn mir da jemand helfen könnte,
ich bin schon am verzweifeln.

Mit freundlichen Grüßen
Mesion



Delphi-Quellcode:
begin
  meinStift.hoch;
  repeat
    if (dieTastatur.wurdeGedrueckt) then
    begin
    dieTastatur.zeichen;
      if (dieTastatur.zeichen='r') then
      begin
        meinStift.radiere;
        meinStift.bewegeBis(dieMaus.hposition,dieMaus.vposition);
        if (dieMaus.istGedrueckt) then
        begin
          meinStift.runter;
        end
        else
        begin
          meinStift.hoch;
        end;
      end;
      if (dieTastatur.zeichen='z') then
      begin
        meinStift.normal;
        meinStift.bewegeBis(dieMaus.hposition,dieMaus.vposition);
        if (dieMaus.istGedrueckt) then
        begin
          meinStift.runter;
        end
        else
        begin
          meinStift.hoch;
        end;
      end;
      if (dieTastatur.zeichen='k') then
      begin
        if (dieMaus.istGedrueckt = true) then
        begin
          meinStift.setzeLinienBreite(2);
          meinStift.bewegeBis(meinStift.hPosition,meinStift.vPosition);
          RadiusKreis:=(RadiusKreis+1);
          warte(10);
          meinStift.zeichneKreis(Radiuskreis);
        end
        else
        begin
          meinStift.bewegeBis(dieMaus.hposition,dieMaus.vposition);
          meinStift.hoch;
          Radiuskreis:=0;
        end;
        if (dieTastatur.zeichen='e') then
        begin
          if (dieMaus.istGedrueckt = true) then
          begin
            meinStift.setzeLinienBreite(2);
            meinStift.bewegeBis(meinStift.hPosition,meinStift.vPosition);
            BreiteRechteck:=(BreiteRechteck+1);
            LaengeRechteck:=(LaengeRechteck+1);
            warte(10);
            meinStift.zeichneRechteck(BreiteRechteck,LaengeRechteck);
          end;
        end
        else
        begin
          meinStift.bewegeBis(dieMaus.hposition,dieMaus.vposition);
          meinStift.hoch;
          BreiteRechteck:=0;;
          LaengeRechteck:=0;
        end;
        if (dieTastatur.zeichen='l') then
        begin
          if (dieMaus.istGedrueckt = true) then
          begin
            meinStift.runter;
            meinStift.zeichneKreis(3);
            meinStift.bewegeBis(meinStift.hPosition,meinStift.vposition);
          end
          else
          begin
            meinStift.bewegeBis(dieMaus.hposition,dieMaus.vposition);
            meinStift.hoch;
          end;
        end;
      end;
      dieTastatur.weiter;
    end;
  until (dieMaus.doppelklick);
end;

Sir Rufo 2. Okt 2010 17:09

AW: Befehl zum pausieren
 
Es wird nur schwierig sein Hilfe zu so einer externen Bibliothek von uns zu bekommen.

Stell dir vor ich baue mir eine Bibliothek und für die Ausgabe eines Textes auf dem Bilschirm wird der Befehl
Code:
Popel
benutzt.

Wer soll dass wissen, dass für die Ausgabe folgender Code notwendig ist
Delphi-Quellcode:
Popel( 'du mich auch' );
Dazu muss man die Bibliothek kennen.

Mesion 2. Okt 2010 17:55

AW: Befehl zum pausieren
 
Ja das ist natürlich einleuchtend ^^

Es geht halt darum, dass das Programm immer das letzte Zeichen der Tastatur abfragt und dadurch soll dann immer eine bestimmte Schleife ausgeführt werden.

Bei dieTastatur.wurdeGedrueckt; wird abgefragt ob die Tastatur überhaupt ein Zeichen enthält.

Der Befehl zum abfragen welcher Buchstabe es ist, ist dieTastatur.zeichen;

Und um das vorderste Zeichen zu löschen bzw. die Tastatur zu ''resetten''gibt es den Befehl dieTastatur.weiter;

Mehr Befehle haben wir für die Tastatur nicht bekommen.

Mit freundlichen Grüßen
Mesion

xZise 2. Okt 2010 18:00

AW: Befehl zum pausieren
 
Möchtest du das man mehrere Tasten gleichzeitig drücken kann?

Außerdem, müsstest du doch, wenn man das k drückt, sagen, dass die Tastatur ein Zeichen weiter geht oder?
Delphi-Quellcode:
if (dieTastatur.zeichen='k') then
begin
  if (dieMaus.istGedrueckt = true) then
  begin

  end
  else
  begin

  end;

  if (dieTastatur.zeichen='e') then
  begin

  end
  else
  begin
    // HIEEEEERR
  end;

  if (dieTastatur.zeichen='l') then
  begin

  end;
end;
Er wird immer im HIEEEEERR Block landen oder?

Übrigens, könntest es auch so schreiben:
Delphi-Quellcode:
if (zeichen = 'a') then
begin

end
else if (zeichen = 'b') then
begin

end;
Weil beide Zeichen gleichzeitig werden wohl nicht gehen.

Und dann kriegt man das noch besser hin:
Delphi-Quellcode:
case zeichen of
  'a' : ;
  'b' : ;
end;
MfG
Fabian


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz