Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Worte-wechsler (https://www.delphipraxis.net/141473-worte-wechsler.html)

origin 9. Okt 2009 16:20


Worte-wechsler
 
Hallo Leute,
stehe echt auf'm Schlauch. :wall: Ich möcht gern einen kleinen Wort-Wechsler schreiben und hänge
da schon seit Stunden dran fest (totaler Anfänger). :oops:
Also eigentlich ne simple Sache, schätze ich.
Das Programm soll bei jedem Klick ein anderes Wort in der TEdit anzeigen.
Sonst nix. Kann mir bitte jemand helfen und mein Listing vervollständigen, dass das funzt.
Ich komme echt nich weiter so. Muss mir unbedingt mal ein Buch kaufen.
Konnte aber nich abwarten es selbst zu probieren... :gruebel:

Hier das Listing:
Delphi-Quellcode:
unit wortwechsel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, Shellapi, ExtCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Button1: TButton;
    GroupBox2: TGroupBox;
    Image1: TImage;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Label1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;



implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;


//Link zur Homepage
procedure TForm1.Label1Click(Sender: TObject);
begin
     ShellExecute(Application.Handle, 'open',
               PChar(Label1.Caption), nil, nil,
               SW_ShowNormal);

               Cursor:=crHandPoint;
               Font.Color:=clBlue;
               Font.Style:=[fsUnderline];
end;


procedure TForm1.Button2Click(Sender: TObject);

 var txt: String;


 begin

      txt := 'Hase-Hund-Maus-Dogge-Bunny-Mickey';
    //txt := 'Fisch-Eidechse-Vogel-Schwuppi-Lurchi-Hansi';   (es gibt noch einige weitere Wortgruppen!!)

      Edit1.Text := txt;




end;

end.
Freue mich auf Eure Hilfe. Danke

DeddyH 9. Okt 2009 16:25

Re: Worte-wechsler
 
Delphi-Quellcode:
unit wortwechsel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, Shellapi, ExtCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Button1: TButton;
    GroupBox2: TGroupBox;
    Image1: TImage;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Label1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject); //FormCreate angelegt
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;



implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;


//Link zur Homepage
procedure TForm1.Label1Click(Sender: TObject);
begin
     ShellExecute(Application.Handle, 'open',
               PChar(Label1.Caption), nil, nil,
               SW_ShowNormal);

               Cursor:=crHandPoint;
               Font.Color:=clBlue;
               Font.Style:=[fsUnderline];
end;


procedure TForm1.Button2Click(Sender: TObject);
const txt: array[0..5] of string = ('Fisch','Eidechse','Vogel','Schwuppi','Lurchi','Hansi');
begin
  Edit1.Text := txt[Random(Length(txt))];
end;

end.

origin 9. Okt 2009 16:32

Re: Worte-wechsler
 
Hey hallo Detlef,
danke für deine superschnelle Antwort.

Wichtig ist, dass die Worte auch tatsächlich wie in meinem Listing gezeigt,
aneinander gereiht stehen: 'Fisch-Eidechse-Vogel-Schwuppi-Lurchi-Hansi'.

Es soll nämlich immer eine andere Reihe von Wortkombinationen (durch "-" getrennt)
mit jedem neuen "ButtonClick" erscheinen.
Also sechs Worte, manchmal auch Ziffern, in Reihe so zu sagen...

Hast du da evtl. auch ne Lösung für?

DP-Maintenance 9. Okt 2009 16:34

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Das ist kein Vorschlag für die Code-Library

DeddyH 9. Okt 2009 16:35

Re: Worte-wechsler
 
Dazu musst Du lediglich die Konstante txt ändern.
Delphi-Quellcode:
const txt: array[0..{Anzahl der Wortgruppen - 1}] of string =
                   ('Hase-Hund-Maus-Dogge-Bunny-Mickey',
                    'Fisch-Eidechse-Vogel-Schwuppi-Lurchi-Hansi',
                    //usw.
                   );

origin 9. Okt 2009 16:38

Re: Worte-wechsler
 
Super. Dickes Dankeschön. :hi:
Okay, ich werde es gleich mal ausprobieren. :coder:

p80286 9. Okt 2009 16:38

Re: Worte-wechsler
 
Damit es sich wirklich bei jedem Click ändert:
Delphi-Quellcode:

var
  altrw : integer;

procedure TForm1.Button2Click(Sender: TObject);
const
  rw : integer;
  txt: array[0..5] of string = ('Fisch','Eidechse','Vogel','Schwuppi','Lurchi','Hansi');
begin
  repeat
    rw:=Random(Length(txt));
  until rw<>altrw;
  Edit1.Text := txt[rw];
  altrw:=rw;
end;
Altrw ist zwar eine globale Variable aber man kann sie ja auch in das Form verbannen.
Bei Detlefs Lösung kann es so aussehen als würde der Text nicht geändert, da die gleiche Zufallszahl zweimal nacheinander kommt.

Ähm was möchtest Du denn jetzt?

Etwa so ähnlich?
Delphi-Quellcode:
txt := 'Hase-Hund-Maus-Dogge-Bunny-Mickey';
txt := 'Hase-Maus-Hund-Dogge-Bunny-Mickey';
txt := 'Dogge-Hase-Hund-Maus-Bunny-Mickey';
Gruß
K-H

/edit zu spät!

DeddyH 9. Okt 2009 16:43

Re: Worte-wechsler
 
Das müsste aber auch ohne globale Variable gehen, wenn man den String selbst vergleicht.
Delphi-Quellcode:
var index: integer;
begin
  repeat
    index := Random(Length(txt));
  until txt[index] <> Edit1.Text;

p80286 9. Okt 2009 16:52

Re: Worte-wechsler
 
@DeddyH
Mir scheit der Vergleich zweier Integer-Werte nicht so aufwendig. Aber hier macht das eine oder andere hundertstel wohl keinen Unterschied.

Gruß
K-H

DeddyH 9. Okt 2009 16:53

Re: Worte-wechsler
 
Denk ich mir auch, vor allem hat der TE nichts von einer hochoptimierten Lösung, die er dann erst nach Jahren begreift, wenn überhaupt :zwinker:

origin 9. Okt 2009 16:54

Re: Worte-wechsler
 
Die Wortkombinationen stehen fest.
in etwa so:


'Hase-Hund-Maus-Dogge-Bunny-Mickey'

'Katze-Esel-Tiger-Taube-Muschi-Ia-Brummi-Guruguru'

'Geist-Tisch-Teppich-Huibuh-Deckdich-Alibaba'

'Zahnarzt-Klempner-Pilot-Karies-Rohrbruch-Flugzeug'


Tja und nach jedem ButtonClick soll eine andere Wortreihe angezeigt werden.
Die Worte innerhalb der Wortreihe sollen dabei NICHT vertauscht werden.

DeddyH 9. Okt 2009 16:57

Re: Worte-wechsler
 
2 Lösungsmöglichkeiten hast Du ja jetzt, oder klappt irgendetwas noch nicht?

origin 9. Okt 2009 16:59

Re: Worte-wechsler
 
Offen gestanden bin ich noch dabei.
Ich habe deine Postings gelesen und gedacht, vielleicht
hatte ich da etwas missverständlich geschrieben und deshalb
in meinen Ausführungen nachgebssert um zu sehen ob du evtl.
etwas an deinem Beitrag änderst.
Sonst fange ich ja stets neu an...

DeddyH 9. Okt 2009 17:02

Re: Worte-wechsler
 
Nö, geändert hab ich nichts mehr, lediglich erweitert. Versuch es mal und wenn etwas nicht funktionieren sollte, meld Dich einfach nochmal.

origin 9. Okt 2009 17:03

Re: Worte-wechsler
 
Ja, okay.
Danke. :)

p80286 9. Okt 2009 17:05

Re: Worte-wechsler
 
Mach mal
Detlefs Lösung funktioniert schon!

Gruß
K-H

P.S. der Integer ist ein Reflex aus uralten Zeiten, aber Dinos sterben ja eh aus.

DeddyH 9. Okt 2009 17:12

Re: Worte-wechsler
 
Meine Lösung funktioniert nur dann nicht mehr, wenn alle Strings im Array exakt gleich sind, aber das macht ja niemand, gell? :mrgreen:

p80286 9. Okt 2009 17:15

Re: Worte-wechsler
 
Weiß man's?

himitsu 9. Okt 2009 17:16

Re: Worte-wechsler
 
Ich hoff es stört nicht, wenn ich nun alles einfach so ignoriere und nochmal von Anfang an anfang?

Du möchtest also daß beim Aufruf von Button 2 unterschiedelich "Befehle" ausgeführt werden ...
> Was nimmt man dafür?
Delphi-Quellcode:
if XYZ then
  txt := 'Hase-Hund-Maus-Dogge-Bunny-Mickey'
else
  txt := 'Fisch-Eidechse-Vogel-Schwuppi-Lurchi-Hansi';
OK, du möchtest aber nun noch mehrer Unterschiedliche ...
> Dafür kann man die IF-THEN-ELSE verschachteln oder man nutzt CASE.
Delphi-Quellcode:
if XYZ then
  txt := 'Hase-Hund-Maus-Dogge-Bunny-Mickey'
else
  txt := 'Fisch-Eidechse-Vogel-Schwuppi-Lurchi-Hansi'
else if XYZ then
  txt := 'es gibt noch einige weitere Wortgruppen!!';
Delphi-Quellcode:
case XYZ of
  0: txt := 'Hase-Hund-Maus-Dogge-Bunny-Mickey';
  1: txt := 'Fisch-Eidechse-Vogel-Schwuppi-Lurchi-Hansi';
  2: txt := 'es gibt noch einige weitere Wortgruppen!!';
end;
So, nun hat man erstmal alles "nebeneinander".


Jetzt kommt noch die Auswahl, was wann ausgeführt werden soll.
> Dafür gibt es Delphi-Referenz durchsuchenRandom

jetzt noch alles kombiniert, würde z.B. dieses rauskommen
Delphi-Quellcode:
case Random(3) of
  0: txt := 'Hase-Hund-Maus-Dogge-Bunny-Mickey';
  1: txt := 'Fisch-Eidechse-Vogel-Schwuppi-Lurchi-Hansi';
  2: txt := 'es gibt noch einige weitere Wortgruppen!!';
end;

Soooo, das war jetzt einfach nur ein einfacher Lösungsansatz.
Erstellt anhand der "Forderungen", welche man erreichen wollte.
Dieses könnte man dann natürlich noch bebliebig ausbauen/erweitern
und würde dann eventuell auch auf derartige Lösungen stoßen, wie schon genannt wurden.
(z.B. aus dem Case ein Array oder Stringliste machen)

origin 9. Okt 2009 18:35

Re: Worte-wechsler
 
Hi Detlef,
du hast mir echt super geholfen. :cheers:

So hat es prima geklappt. Beliebig erweiterbar. Super.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
const txt: array[0..5] of string = ('Hund-Katze-Maus-Bello-Muschi-Mickey','Esel-Tiger-Ente-Ia-Fauch-Quack','Tisch-Stuhl-Leiter-Essen-Sitzen-Klettern','Geld-Bild-Haus-Münze-Farbe-Wohnen','Flasche-Teller-Glas-Wein-Porzellan-Scherben','Karotte-Erbse-Mandel-Hase-Strauch-Schale');
begin
  Edit1.Text := txt[Random(Length(txt))];


Also ich werde mir echt ein gescheites Buch zulegen.
Wie ich das mit den Arrays hätte machen sollen, da wäre ich so nich dahinter gekommen.

Nun ists klar.

Wünsche dir und allen hier noch viel Freude beim Programmieren und ein schönes WE. :dancer:

DeddyH 9. Okt 2009 18:45

Re: Worte-wechsler
 
Wenn Du die repeat-Schleife noch einbaust, ist es wirklich immer ein anderer String ;), ansonsten freue ich mich, dass ich Dir helfen konnte. Übrigens musst Du nicht gleich Geld für Bücher ausgeben, gute Tutorials gibt es auch online, beispielsweise hier.


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