AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Astobix · begonnen am 17. Nov 2013 · letzter Beitrag vom 18. Nov 2013
Antwort Antwort
Seite 1 von 2  1 2      
Astobix

Registriert seit: 26. Dez 2012
26 Beiträge
 
Delphi 6 Personal
 
#1

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

  Alt 17. Nov 2013, 17:29
Hallo,

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

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
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#2

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten

  Alt 17. Nov 2013, 17:52
Ich brauche nicht mehr als 2 Sekunden, um das zu realisieren.

Warum gibt es Leute, die wirklich für Alles fremde Hilfe brauchen!?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten

  Alt 17. Nov 2013, 17:52
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;
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?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (17. Nov 2013 um 17:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#4

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten

  Alt 17. Nov 2013, 17:57
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Astobix

Registriert seit: 26. Dez 2012
26 Beiträge
 
Delphi 6 Personal
 
#5

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten

  Alt 17. Nov 2013, 18:16
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

Geändert von Astobix (17. Nov 2013 um 19:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten

  Alt 17. Nov 2013, 19:56
Indem man der Eigenschaft TLabel.OnClick eine Methode zuweist.

Anbieten würde sich das ja beim Erzeugen des Labels
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#7

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten

  Alt 17. Nov 2013, 20:03
DeinLabel.OnClick := @SomeTNotifyEventMethod; Wenn Du den Modus auf Delphi statt objfpc gestellt hast, kann das @ entfallen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Astobix

Registriert seit: 26. Dez 2012
26 Beiträge
 
Delphi 6 Personal
 
#8

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten

  Alt 17. Nov 2013, 21:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten

  Alt 17. Nov 2013, 21:53
Und diese Errormeldung ist so geheim, dass du alle erschiessen müsstest, wenn du die hier kundtust?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Astobix

Registriert seit: 26. Dez 2012
26 Beiträge
 
Delphi 6 Personal
 
#10

AW: Bei jedem Klick einen Text für bestimmte Zeit auf die Form setzten

  Alt 17. Nov 2013, 21:56
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr.
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