Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Events (https://www.delphipraxis.net/127456-problem-mit-events.html)

Angelnoir 13. Jan 2009 17:28


Problem mit Events
 
Hallo!

Also zuerst sei gesagt, dass ich seit 2 Jahren Turbo Pascal programmiert habe und mich jetzt auf meine Facharbeit vorbereite. Diese sollte in Delphi sein.
Teilweise hab ich mich minimal mit Java beschäftigt.

So, nun zu meiner Frage:
Es mag ziemlich banal erscheinen, aber auch nach 2-tägigem Forum durchsucen und ausprobieren habe ich keine Lösung gefunden.
Ich schreibe einen Text in ein Label und der Text soll geändert werden, wenn man auf einen Button klickt. (Hintergrund des Ganzen ist ein RPG, das ich in TP programmiert habe und jetzt versuche ähnlich in Delphi zu realisieren)

Delphi-Quellcode:
procedure TDialogFrame.Button1Click(Sender: TObject);
begin
   weiter:=true;
end;

procedure TDialogFrame.Dialog1;

begin
   weiter:=false;
   Mann1Lbl.Caption:='Hey! Du da, mach die Augen auf, es wird Zeit!';
   SpielerLbl.Caption:='...';
   If weiter then
      Mann1Lbl.Caption:='Verdammter, verschlafener Kerl, wach endlich auf!';
end;
Irgendwie ist mir klar, dass das nicht gehen kann. Aber wie fange ich denn dan so ein Event ab?
Wäre für Hilfe dankabr, kann auch irgendein Anfänger-Delphi-Tutorial sein :-D

MfG
Angelnoir

MSSSSM 13. Jan 2009 17:35

Re: Problem mit Events
 
Ein Timer, den auf z.B. 10 Sekunden stellen, und im TimerEvent Timer.Enabled:=false; und weiter:=true

Marius

Sir Rufo 13. Jan 2009 18:08

Re: Problem mit Events
 
Ich hoffe ja mal nicht, dass du davon ausgehst, dass der Text "Verdammter, ..." irgendwann mal erscheint.
Zitat:

Zitat von Angelnoir
Delphi-Quellcode:
procedure TDialogFrame.Button1Click(Sender: TObject);
begin
   weiter:=true;
end;

procedure TDialogFrame.Dialog1;

begin
   weiter:=false; // <-- wenn das gemacht wird ...
   Mann1Lbl.Caption:='Hey! Du da, mach die Augen auf, es wird Zeit!';
   SpielerLbl.Caption:='...';
   If weiter then // <-- ... dann wird das hier nie ausgeführt
      Mann1Lbl.Caption:='Verdammter, verschlafener Kerl, wach endlich auf!';
end;

Vielleicht suchst du ja so etwas ...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, AdvDateTimePicker;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FWeiter: Boolean;
    procedure SetWeiter(const Value: Boolean);
  public
    { Public-Deklarationen }
    property Weiter : Boolean read FWeiter write SetWeiter;
  end;

var
  Form1: TForm1;

implementation

uses
  DateUtils;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Weiter := True;
end;

procedure TForm1.SetWeiter(const Value: Boolean);
begin
  FWeiter := Value;
  if
    Weiter
  then
    Label1.Caption := 'Weiter ist True'
  else
    Label1.Caption := 'Weiter ist False';
end;

end.

Angelnoir 13. Jan 2009 18:42

Re: Problem mit Events
 
Dass das nicht ausgeführt wird, war mir klar :shock:
Ich hatte gehofft irgendwas zu finden um die Prozedur solange zu unterbrechen bis halt der Button geklickt wird. So etwas wie ein booleascher Ausdruck den der Knopf erzeugt.

Und dass meine eine Prozedur nicht auf meine andere wartet, ist mir auch schon aufgefallen^^
Ist halt alles etwas sehr neu, wenn man aus der hübschen DOS-Welt kommt :-D

P.S.: Ach ich werd mal mit eurenVorschlägen experimentieren, vielen Dank schonmal :)

Sir Rufo 13. Jan 2009 18:52

Re: Problem mit Events
 
Die Applikation wartet immer, bis ein Event ausgelöst wird (z.B. Button drücken).

Du musst der Applikation nicht beibringen zu warten, sondern dann zu reagieren, wenn sie soll ;)
Das Warten kann die von Haus aus schon.

Angelnoir 13. Jan 2009 22:02

Re: Problem mit Events
 
Aber wie sage ich meiner Prozedur Dialog jetzt, dass sie auf nen Button Click warten soll?
Am besten begrabe ich meine Ideen und machs anders :coder2:

taaktaak 13. Jan 2009 22:16

Re: Problem mit Events
 
warum nicht so ...
oder habe ich da was falsch verstanden?

Delphi-Quellcode:
procedure TDialogFrame.Button1Click(Sender: TObject);
begin
  Mann1Lbl.Caption:='Verdammter, verschlafener Kerl, wach endlich auf!';
end;

procedure TDialogFrame.Dialog1;
begin
  Mann1Lbl.Caption:='Hey! Du da, mach die Augen auf, es wird Zeit!';
  SpielerLbl.Caption:='...';
end;

Angelnoir 13. Jan 2009 22:27

Re: Problem mit Events
 
Ja, das ist schon das, was ich will... nur sollten darauf eigentlich noch weite Dialogstücke folgen^^
Meine erste idee war es mitzuzählen, wie oft man schon auf den Button geklickt hat und je nachdme unterschiedliche Sachen anzeigen lassen
Haltet ihr das für zu kompliziert oder umständlich?

taaktaak 13. Jan 2009 22:38

Re: Problem mit Events
 
Hmm, dann alle Texte in OnClick(), einen Unit-lokalen Zähler definieren, diesen mit jedem Click erhöhen und je nach Zählerstand einen Text anzeigen (und nicht vergessen, den Zähler irgendwann wieder zurück setzen)

Angelnoir 13. Jan 2009 22:40

Re: Problem mit Events
 
Ja genau sowas hatte ich mir gedacht :)
Dankeschön für die Hilfe

guidok 14. Jan 2009 06:19

Re: Problem mit Events
 
Wie wäre es denn, wenn die Texte in einer Stringlist abgelegt wären?

Dann kannst du den Text über die Zählvariable indexieren.

Wechselnde Dialoge könntest du relativ leicht aus Dateien nachladen, evtl. verschlüsseln, damit nicht jeder die Texte editieren kann.

Delphi-Quellcode:
  //...
  public
   Textstelle: Integer; //Das ist der Zähler
   TexteMann1: TStrings;
  end;

//die Texte aus einer Datei laden
  TexteMann1.LoadFromFile(IrgendeinDateiname);

//die Texte anzeigen
  Mann1Lbl.Caption := TexteMann1[Textstelle];

Angelnoir 14. Jan 2009 14:53

Re: Problem mit Events
 
Das ist mal ne gute Ide, hab mir eh shcon Gedanken gemacht wie ich meine Daten etwas schwieriger zugänglich mache, da mein Informatikkurs bestimmt Freude daran hätte, meine Gespräche zu verändern :-D
Wird heute abend gleich ausprobiert

guidok 14. Jan 2009 15:09

Re: Problem mit Events
 
Da die TStringList auch Namen-Wertepaare unterstützt (z.B. Dialog1Zeile1="Dies ist eine Textzeile") könntest du auch darüber nachdenken, alle Inhalte in einer Stringliste zu führen.

Zum Zugriff auf die Namen und Werte gibt es entsprechende Eigenschaften:
Delphi-Quellcode:
Mann1Lbl.Caption := TexteMann1.Values('Dialog1Zeile1');
Dies weist dem Caption den Text 'Dies ist eine Textzeile" zu.

Optimalerweise solltest du dir eine TDialogklasse von TStringList ableiten, die über die zusätliche Eigenschaft Dialogtext(Dialognummer, Dialogzeile) verfügt. Darin kapselst du dann den Aufruf über Values und kannst im Hauptprogramm:

Delphi-Quellcode:
Mann1Lbl.Caption := TexteMann1.Dialogtext(1,1); //Dialog 1, Zeile 1

Ach ja, weil ich es oben vergessen habe:
Delphi-Quellcode:
TexteMann1 := TStringList.Create; //nicht vergessen die Variable zu instantiieren
//..

TextMann1.Free; //und später auch irgendwo wieder freizugeben!
Das alles sind nur Anregungen, was machbar ist. Es gibt natürlich noch viel mehr Möglichkeiten, dazu kenne ich jetzt deine Vorgehensweise nicht zu der du deine optimale Lösung suchen musst.


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