Autor Beitrag
elcomportal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Win XP home
D5 standard
BeitragVerfasst: Mi 28.12.05 23:17 
Hi,
also ich habe mal wieder ein Problem.
Im meinem Programm ist ein EDIT Feld. Wenn man da was eingibt, muss geprüft werden ob das Zeichen ein '§' ist. Wenn ja darf das folgende Zeichen nur ein § oder eine Zahll von 1-8 sein. Also: §§ §1 §2 §3 §4 §5 §6 §7 §8 sind mögliche Kombinationen. Einzeln darf der § auch nicht da stehen. Diese Kombinationen werden in die Zahlen 1-8 oder ORD('§') umgewandelt. Alle anderen Zeichen werden einfach in ihre ASCII werte gewandelt und in ein Feld geschrieben. Aber geht das denn nicht einfacher? Ich wollte das Feld wenn's einen Fehler enthält (z. B. §s) rot färben. Aber ich finde mich jetzt kaum noch durch und dann noch mehr ...??

Okay, hier der Code:

ausblenden volle Höhe Delphi-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:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
procedure TForm1.Edit1Change(Sender: TObject);
begin;
 i2:= 0;
 help:=0;
 label101.caption := inttostr(length(edit1.text));
 for i := 1 to length(edit1.text) do
  begin
   if help = 0 then
    begin
     if copy(edit1.text,i,1) = '§' then
      begin
       help := 1;
//       i2 := i2 +1;
      end
     else
      begin
       i2:=i2 + 1;
       eingabezeichen[i2] := ord(edit1.text[i]);
      end;
    end
   else
    begin
     if copy(edit1.text,i,1) = '§' then
     begin
      i2:=i2 + 1;
      eingabezeichen[i2] := ord(edit1.text[i]);
      help:= 0;
     end
     else if copy(edit1.text,i,1) = '1' then
     begin
      i2:=i2 + 1;
      eingabezeichen[i2] := 1;
      help:= 0;
     end
     else if copy(edit1.text,i,1) = '2' then
     begin
      i2:=i2 + 1;
      eingabezeichen[i2] := 2;
      help:= 0;
     end
     else if copy(edit1.text,i,1) = '3' then
     begin
      i2:=i2 + 1;
      eingabezeichen[i2] := 3;
      help:= 0;
     end
     else if copy(edit1.text,i,1) = '4' then
     begin
      i2:=i2 + 1;
      eingabezeichen[i2] := 4;
      help:= 0;
     end
     else if copy(edit1.text,i,1) = '5' then
     begin
      i2:=i2 + 1;
      eingabezeichen[i2] := 5;
      help:= 0;
     end
     else if copy(edit1.text,i,1) = '6' then
     begin
      i2:=i2 + 1;
      eingabezeichen[i2] := 6;
      help:= 0;
     end
     else if copy(edit1.text,i,1) = '7' then
     begin
      i2:=i2 + 1;
      eingabezeichen[i2] := 7;
      help:= 0;
     end
     else if copy(edit1.text,i,1) = '8' then
     begin
      i2:=i2 + 1;
      eingabezeichen[i2] := 8;
      help:= 0;
     end
     else
     begin
//      edit1.text:=copy(edit1.text,1,length(edit1.text)-1);
      edit1.SelStart := length(edit1.text);
     end;
    end;
  end;
 if e1i2alt > length(edit1.text) then
 begin
  for i := length(edit1.text) + 1 to 120 do
   eingabezeichen[i] := 0;
 end;
 e1i2alt:=length(edit1.text);
 label106.caption := inttostr(i2);
end;


Kann mir da mal einer auf die Sprünge helfen? Bitte.

Mfg
Torsten

_________________
Starkstrom macht klein und hässlich
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 29.12.05 00:54 
Moin!

Was tust du da blos... :gruebel: :wink:

Erklär doch mal etwas genauer, WAS das soll, WARUM du das tust und WIE du dir den Anwendungsfall dahinter vorstellst; ich vermute mal wieder einen fetten Konzeptfehler. :wink:

cu
Narses
elcomportal Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Win XP home
D5 standard
BeitragVerfasst: Do 29.12.05 01:43 
Mahlzeit!

Also, mit dem ganzen Kram wird eine Steuerung mit LCD angesteuert.
Mit dem § und der Zahl danach werden Steuerzeichen definiert. Diese können auch im Text drin stehen (z. B. für Anzeige von Sonderzeichen auf dem LCD. Kann dann so aussehen:
z1Spannung: §1V

in die Leerzeichen wird vom Gerät automatisch der Analogwert eingefügt.
Die Syntax erfordert das § und eine Zahl dahinteroder nochmal das § um § anzuzeigen. Es darf nicht vorkommen, dass nach dem § ein Buchstabe folgt. Deswegen muss das, was im edit-Feld steht überprüft werden. Wenn ein Fehler drin ist, dann Sende-Button deaktivieren und Edit-Feld Rot machen, dachte ich mir.

MFg
Torsten

_________________
Starkstrom macht klein und hässlich
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 29.12.05 10:04 
Moin!

Kommst du damit weiter?
ausblenden volle Höhe Delphi-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:
procedure TForm1.Edit1Change(Sender: TObject);
  const
    esc = '§';
    ok: set of Char = ['1'..'8',esc];
  var
    i: Integer;
    shift,
    isok: Boolean;
begin
  if Edit1.Modified then begin // wenn der Text verändert wurde
    isok := TRUE; // default: Text ist OK
    shift := FALSE; // Esc-Flag initialisieren
    i := 1// Zeichenzeiger initialisieren
    while ( (i <= Length(Edit1.Text)) // solange Zeichen da sind
            and                       // und
            (isok) ) do begin         // die Folge bis hier OK ist
      if (shift) then begin // letztes Zeichen war das Esc-Zeichen
        isok := (Edit1.Text[i] in ok); // Zeichen dahinter OK?
        shift := FALSE; // Esc-Flag zurücksetzen
      end
      else // aktuelles Zeichen = Esc?
        shift := (Edit1.Text[i] = esc); // wenn ja, Flag setzen
      Inc(i); // nächstes Zeichen
    end// while
    isok := (isok and (not shift)); // offene Esc-Zeichen sind falsch
    // Auswertung: Schriftfarbe im Edit-Feld setzen
    if (isok) then
      Edit1.Font.Color := clWindowText
    else
       Edit1.Font.Color := clRed;
  end;
end;

cu
Narses
elcomportal Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Win XP home
D5 standard
BeitragVerfasst: Do 29.12.05 13:39 
Jep, hab's angepasst undes funzt.
DANKE!!!!
MFg
Torsten

_________________
Starkstrom macht klein und hässlich