Autor Beitrag
Goolix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83



BeitragVerfasst: Di 09.03.04 14:11 
hi, ich prigrammiere für die schule momentan an einem Hangman-Prog.
es ist noch nach der einfachen version gefragt, es soll ein einziger fester begriff einprogrammiert werden, nach diesem wird dann gefragt.
das programm soll automatisch die wortlänge erkennen, und in ein lable oder editfeld für jeden buchstaben einen "-" einfügen.
bei eingabe eines buchstabens soll dann der entsprechende "-" durch den buchastaben ersetzt werden.
Den rest schaffe ich glaube ich selbst... die probleme sind:

wie lasse ich delphi die wortlänge erkennen und wie weiß delphi, welchen "-" es ersetzten soll/darf?
Das problem ist vor allem, dass uns keiner die befehle dafür gesagt hat und ich aus der delphi-hilfe nicht schlau werde, es wäre also super, wenn jemand auch einen kleinen code einfügen könnte.

danke in voraus
/goolix

Moderiert von user profile iconPeter Lustig: Topic verschoben
Pascal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155

Win 98, Win XP
Delphi 2005, Delphi 5
BeitragVerfasst: Di 09.03.04 15:38 
Ein par Tipps:
Die function length(s:string):integer gibt die Länge eines Strings zurück
Die function pos(substr:string,s:string):integer gibt die Position eines Substrings(z.B.'A') in einem Strings zurück
Goolix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83



BeitragVerfasst: Di 09.03.04 22:34 
ok, danke schonmal... mal sehen, ob ich es damit hinbekomme

/goolix
Jack Falworth
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 222

Win XP Pro, Slackware 10.0
D5 Enterprise, C++, ABAP
BeitragVerfasst: Mi 10.03.04 12:40 
ich nehme mal an der anwender gibt dann in einem edit oder sonstwo einen buchstaben ein und das Programm überprüft ob der buchstabe im Begriff vorhanden ist. Das könnte man so realisieren:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
var st: string; 
      i: integer; // Laufvariable für for - Schleife

Label1.caption:= '';
st:= begriff;
for i:= 1 to length (st) do 
begin
 Label1.Caption:= Label1.caption + '-';  // In Label1 kommen so viele '-' wie der Begriff Zeichen hat
end;

for i:= 1 to length (st) do // for - Schleife, die alle Zeichen des Begriffs durchgeht
begin
 if st[i] = Edit1.Text then  // wenn das eingegebene Zeichen im Begriff gefunden wird, dann..
 begin
  delete(label1.caption,i,1); // löscht '-' an der Stelle i
  Insert(st[i], label1.caption, i);  // fügt das eingegebene Zeichen an der Stelle i ein
 end;
end;


das war jetzt einfach mal frei ausm Kopf. Habs nicht ausprobiert, sollte aber funktionieren.
Aber nur benutzen wenn dir sonst nichts einfällt, sonst entfällt der Lerneffekt :D
Wenn du Fragen hast nur zu!

MfG

Jack Falworth

PS:
@Mod: Falsches Forum, wäre vielleicht besser in Sonstiges aufgehoben. Es geht ja hier mehr um String Operationen.

_________________
Andere zu kritisieren ist mitunter eine Möglichkeit, sich selbst ins bessere Licht zu setzen.
Pascal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155

Win 98, Win XP
Delphi 2005, Delphi 5
BeitragVerfasst: Mi 10.03.04 16:31 
3 Sachen würde ich da ändern:
1. Label1.caption kann man nicht der Delete-Procedure übergeben, woran das auch immer liegt.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  labelcaption:=label1.caption;
  delete(labelcaption,i,1); // löscht '-' an der Stelle i
  Insert(st[i], labelcaption, i);  // fügt das eingegebene Zeichen an der Stelle i ein
  label1.caption:=labelcaption;

2. Den ersten Teil würde ich in ein Create- oder Neustartclick- Ereigniss tun.

3. ,was aber nicht nötig ist: ich würde kein Editfeld benutzen, sondern die Procedure in onkeypress setzen und statt edit1.text key abfragen. (dann sollte man allerdings auf GROß/klein-Schreibung verzichten.)

aber ansonsten ist der Code ganz gut.
Goolix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83



BeitragVerfasst: Do 11.03.04 20:43 
ok, danke schonmal.... der code ist ja relativ verständlich.
als ich ihn nun testen wollte, ist mir ein fehler aufgefallen:

wenn ich jetzt als begriff "goolix" nehme und ein o rate, dann werden mir zwar beide 'o' angezeigt, die noch nicht erratenen '-' verschwinden aber.... wie kann ich das ändern?



achso, eine frage hätte ich noch zu dieser zeile:
ausblenden Quelltext
1:
Label1.Caption:= Label1.caption + '-';  // In Label1 kommen so viele '-' wie der Begriff Zeichen hat					


wie erkennt delphi hier, wie lang das wort ist, und wieviele '-' es machen muss?[/code]
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 11.03.04 21:03 
Hierdurch:

ausblenden Delphi-Quelltext
1:
for i:= 1 to length(st) do					


length gibt die Länge des strings zurück.
Pascal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155

Win 98, Win XP
Delphi 2005, Delphi 5
BeitragVerfasst: Fr 12.03.04 13:56 
Zitat:
wenn ich jetzt als begriff "goolix" nehme und ein o rate, dann werden mir zwar beide 'o' angezeigt, die noch nicht erratenen '-' verschwinden aber.... wie kann ich das ändern?

Das klingt für mich so, als ob dann aus '------' ein 'oo' werden würde. Wenn du das meinst- Der Fehler tritt bei mir nicht auf. Aber, wenn du alles in eine Buttonclick procedure packst, dann wird aus 'g-----' +gedrückt 'o' wird zu '-oo---'. Wenn du das meinst, dann musst du den Quelltext nur wie von mir bereits erwähnt modifizieren:
Zitat:
2. Den ersten Teil würde ich in ein Create- oder Neustartclick- Ereigniss tun.

Der Quellcode sieht dann etwa so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.NeustartClick(Sender: TObject);
begin
Label1.caption:= '';
st:= 'goolix';
for i:= 1 to length (st) do
 Label1.Caption:= Label1.caption + '-';  // In Label1 kommen so viele '-' wie der Begriff Zeichen hat
end;

procedure TForm1.NeustartKeyPress(Sender: TObject; var Key: Char);
begin
for i:= 1 to length (st) do // for - Schleife, die alle Zeichen des Begriffs durchgeht
 if st[i] = key then  // wenn das eingegebene Zeichen im Begriff gefunden wird, dann..
 begin
  labelcaption:=label1.Caption;
  delete(labelcaption,i,1); // löscht '-' an der Stelle i
  Insert(st[i], labelcaption, i);  // fügt das eingegebene Zeichen an der Stelle i ein
  label1.caption:=labelCaption;
 end;
end;
Goolix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83



BeitragVerfasst: Fr 12.03.04 15:58 
also, das problem ist, dass er aus ------ wenn ich auf 'g' klicke bzw. es eingebe, nicht g----- ausgibt, sondern nur 'g'. wenn schon meinestwegen

'g' im label steht, und ich o eingebe, dann wird daraus satt 'goo---' oder wenigstens 'goo' nur 'oo'
Pascal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155

Win 98, Win XP
Delphi 2005, Delphi 5
BeitragVerfasst: Sa 13.03.04 17:30 
Dann schick mal deinen Code. Bei mir tritt der Fehler nämlich nicht auf. (Mein Code: s.o.)
Goolix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83



BeitragVerfasst: So 14.03.04 14:01 
ok...

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var st: string;
      i: integer; // Laufvariable für for - Schleife
      labelcaption:string;
begin

Label1.caption:= '';
st:= 'goolix';
for i:= 1 to length (st) do
begin
 Label1.Caption:= Label1.caption + '-';  // In Label1 kommen so viele '-' wie der Begriff Zeichen hat
end;

for i:= 1 to length (st) do // for - Schleife, die alle Zeichen des Begriffs durchgeht
begin
 if st[i] = Edit1.Text then  // wenn das eingegebene Zeichen im Begriff gefunden wird, dann..
 begin
  delete(labelcaption,i,1); // löscht '-' an der Stelle i
  Insert(st[i], labelcaption, i);  // fügt das eingegebene Zeichen an der Stelle i ein
  label1.caption:=labelcaption;
 end;
end;
end;

end.
[/code]
Pascal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155

Win 98, Win XP
Delphi 2005, Delphi 5
BeitragVerfasst: Mo 15.03.04 17:21 
Dann weiß ich jetzt warum der Fehler den du hast nicht der war, den ich erwartet habe:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
begin
  >>labelcaption:=label1.caption;<< diesen Teil hast du in deinem Code vergessen
  delete(labelcaption,i,1); // löscht '-' an der Stelle i
  Insert(st[i], labelcaption, i);  // fügt das eingegebene Zeichen an der Stelle i ein
  label1.caption:=labelcaption;
end;
ansonsten musst du ihn genau so beheben wie oben ´bereits 2 mal beschrieben:
Zitat:
2. Den ersten Teil würde ich in ein Create- oder Neustartclick- Ereigniss tun.


(Der erste Teil ist der den ich bei meinem Code in das TForm1.NeustartClick-Ereignis getan habe:
Zitat:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.NeustartClick(Sender: TObject); 
begin 
Label1.caption:= ''; 
st:= 'goolix'; 
for i:= 1 to length (st) do 
 Label1.Caption:= Label1.caption + '-';  // In Label1 kommen so viele '-' wie der Begriff Zeichen hat 
end;
Goolix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83



BeitragVerfasst: Di 16.03.04 07:30 
jo, danke deine super hilfe, programm läuft jetzt...und alles nur wegen einer zeile :-)