Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten (https://www.delphipraxis.net/177625-bei-jedem-klick-einen-text-fuer-bestimmte-zeit-auf-die-form-setzten.html)

Astobix 17. Nov 2013 16:29

Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Hallo,

Vorerst: Entschuldigung für die unpräzise Überschrift, ich weiß nicht wie ich mein Problem beschreiben soll :oops:

Ich würde gerne bei einer bestimmten Aktion (z.B. jedem Klick auf die Form, oder jedes mal wenn ich Leertaste drücke) etwas erscheinen lassen (z.B. einen Text oder ein Image). Ich nehme als Beispiel jetzt mal den Text. Immer wenn ich Leertaste drücke, erscheint der Text an einer bestimmten Stelle auf der Form und bewegt sich auf der Form um 100 Pixel nach oben. Danach verschwindet er wieder.

Ich möchte, dass es keine wirkliche maximale Anzahl an Texten gibt, die gleichzeitig auf der Form sind. Um so schneller und mehr ich die Leertaste drücke, desto mehr Texte befinden sich auf der Form.

Ich habe allerdings keine Ahnung, wie ich so etwas von der Art realisieren kann. Ich weiß auch nicht, wie ich nach dem Problem suchen soll, da ich es nicht wirklich mit einigen Stickwörtern beschreiben kann :(

Ich würde mich sehr über eine Antwort freuen! :)

Gruß,
Astobix

hathor 17. Nov 2013 16:52

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Ich brauche nicht mehr als 2 Sekunden, um das zu realisieren.

Warum gibt es Leute, die wirklich für Alles fremde Hilfe brauchen!?

Sir Rufo 17. Nov 2013 16:52

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Erzeuge ein Label und setze es auf die Form.
Dieses Label hängst du auch in eine Liste.

Ein Timer arbeitet beim OnTimer Event diese Liste ab und verändert die Position.
Wenn ein Label diese (100) Schritte hinter sich hat, dann entferne es aus der Liste und zerstöre es.

Eine Möglichkeit diese Anzahl an verbleibenden Schritten zu speichern wäre die Tag-Eigenschaft von TLabel.

Delphi-Quellcode:
procedure TMyForm.AddNewLabel( const ACaption : string );
var
  LLabel : TLabel;
begin
  LLabel := TLabel.Create( nil );
  LLabel.Caption := ACaption;
  LLabel.Top := Random( Self.ClientHeight - 100 ) + 100;
  LLabel.Left := 50;
  LLabel.Parent := Self;

  LabelList.Add( LLabel );
end;

procedure TMyForm.LabelTimerTimer( Sender : TObject );
var
  LIdx : Integer;
  LLabel : TLabel;
begin
  LIdx := 0;
  while Lidx < LabelList.Count do
  begin
    LLabel := LabelList.Items[LIdx] as TLabel;
    if LLabel.Tag = 0 then
      begin
        LabelList.Delete( LIdx );
      end
    else
      begin
        LLabel.Top := LLabel.Top - 1;
        LLabel.Tag := LLabel.Tag - 1;
        Inc( LIdx );
      end;
  end;
end;
Zitat:

Zitat von hathor (Beitrag 1236296)
Ich brauche nicht mehr als 2 Sekunden, um das zu realisieren.

Warum gibt es Leute, die wirklich für Alles fremde Hilfe brauchen!?

Und warum kannst du das so schnell?
Konntest du das schon immer so schnell?

himitsu 17. Nov 2013 16:57

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Wenn es nur um Texte/Grafiken geht, dann kannst du natürlich auch soviele auf ein Canvas zeichnen, wie du willst
und diese natürlich auch beliebig "verschieben" (neu zeichnen).

Hier im Forum suchenKomponente dynamisch erstellen
Hier im Forum suchenKomponente zur Laufzeit erstellen

Astobix 17. Nov 2013 17:16

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Vielen Dank für die schnelle Antwort!

Mein Problem war, dass ich noch nie mit Listen gearbeitet habe, deswegen bin ich nicht auf die Idee gekommen, es auf die Weise zu probieren :)

Wie kann ich denn jetzt den einzelnen Labels z.B. ein OnClick Ereigniss zuweisen? Sorry für die dummen Fragen, aber ich hab keine Idee wie :/

Edit: Hab die Lösung selbst gefunden :)

Sir Rufo 17. Nov 2013 18:56

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Indem man der Eigenschaft
Delphi-Quellcode:
TLabel.OnClick
eine Methode zuweist.

Anbieten würde sich das ja beim Erzeugen des Labels

DeddyH 17. Nov 2013 19:03

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Delphi-Quellcode:
DeinLabel.OnClick := @SomeTNotifyEventMethod;
Wenn Du den Modus auf Delphi statt objfpc gestellt hast, kann das @ entfallen.

Astobix 17. Nov 2013 20:15

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Okay, mit mehreren Labels klappt das gut soweit, vielen Dank.

Eine letzte Frage für Heute habe ich aber noch, denn wenn ich versuche statt einem Label das Ganze mit einem Image zu machen, bekomme ich eine Errormeldung.

Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
 case Key of
  37: PlayerIMG.Left:=PlayerIMG.Left-10;
  39: PlayerIMG.Left:=PlayerIMG.Left+10;
  $20: ErzeugeLaser('.\gfx\Laser.jpg');
 end;
end;
Code:
procedure TForm1.ErzeugeLaser(const Picture: String);
var
 ILaser:TImage;
begin
 ILaser := TImage.Create( nil );
 ILaser.Picture.LoadFromFile(Picture);
 ILaser.Width:=8;
 ILaser.Height:=16;
 ILaser.Left:=PlayerIMG.Left+12;
 ILaser.Top:=PlayerIMG.Top-32;
 ILaser.Parent:=Self;
 ILaser.Tag:=10;


 LaserList.Add(ILaser);
end;
Code:
procedure TForm1.LaserTimerTimer(Sender: TObject);
var
 i: Integer;
 ILaser: TImage;
begin
 i := 0;
 while i < LaserList.Count do
 begin
  ILaser := LaserList.Items[i] as TImage;
  if ILaser.Top = 0 then
   begin
    LaserList.Delete(i);
   end
  else
   begin
    ILaser.Top:=ILaser.Top - 5;
    Inc(i);
   end;
 end;
end;
Letzendlich habe ich genau den gleichen Code benutzt, nur eben auf ein Image übertragen. Doch mir wird eine Fehlermeldung in der Zeile
Code:
 while i < LaserList.Count do
angezeigt.

Sir Rufo 17. Nov 2013 20:53

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Und diese Errormeldung ist so geheim, dass du alle erschiessen müsstest, wenn du die hier kundtust? :roll:

Astobix 17. Nov 2013 20:56

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
 
Project PSpace.exe raised exception class EAccessViolation with message 'Access violation at address 00462C60 in module 'PSpace.exe'. Read of address 00000008'. Process stopped. Use Step or Run to continue.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 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