Entwickler-Ecke

Sonstiges (Delphi) - Formfelder werden nicht aktualisiert


Fasi-Monster - Di 24.09.02 14:24
Titel: Formfelder werden nicht aktualisiert
:roll:
Moin
als Anfänger hätte ich da mal eine einfache Frage: Ich lasse mit einem Buttonclick viele Proceduren starten, die etwas berechnen. Jetzt habe ich sozusagen Ausgabefelder, die "so" Zwischenergebnisse anzeigen sollen. Machen´se aber nicht, die werden sogar noch weiß...
Hat einer´nen Tip ? :oops:


Hagbard Celine - Di 24.09.02 14:29
Titel: Re: Formfelder werden nicht aktualisiert
Fasi-Monster hat folgendes geschrieben:
:roll:
Moin
als Anfänger hätte ich da mal eine einfache Frage: Ich lasse mit einem Buttonclick viele Proceduren starten, die etwas berechnen. Jetzt habe ich sozusagen Ausgabefelder, die "so" Zwischenergebnisse anzeigen sollen. Machen´se aber nicht, die werden sogar noch weiß...
Hat einer´nen Tip ? :oops:


Tip 1 : Poste deinen Code
Tip 2 : Beschreibe kurz deinen Formular-Aufbau und benenne die Verwendeten(relevanten) komponenten!


JeanvanHees - Di 24.09.02 14:32

Nicht rot werden; jeder hier war mal anfänger.
Deine frage ist aber nicht so deutlich, könntest du vielleicht etwas code sehen lassen, oder etwas mehr erzählen?


Fasi-Monster - Di 24.09.02 14:49

Ist ein vereinfachtes Proggi um Primzahlen zu berechnen und abzuspeichern :


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:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
Procedure TForm2.fuenfamende;
begin
  funf:=StrToInt(editt.Text[jkl]);
  if funf = 5 then
  Grund := false
  else
  checkbox2.Checked:=true;
end;
Procedure TForm2.Quersumme;
var lang,a,wert,zwsu:Integer;
Begin
  REPEAT
  lang:=LENGTH(Quer.Caption);
  wert:=0;
  FOR a:=1 TO lang DO
    BEGIN
      zwsu:=StrToInt(Quer.caption[a]);
      wert:=wert+zwsu;
    END;
  Quer.caption:=IntToStr(wert);
  UNTIL lang < 2 ;
    IF wert mod 3 = 0 then
    begin
    grund:=false;
    end
    else checkbox1.Checked:=true
End;
procedure TForm2.FormActivate(Sender: TObject);
begin
    table1.last;
    Pruefzahl:=strtoint(dbedit1.text);
    Table2.First;
    Table2.MoveBy(5);
End;
procedure TForm2.Button2Click(Sender: TObject);
VAR i:integer;
BEGIN
IF CheckBox5.Checked = True then     //für´n Langsam-Modus
BEGIN
langsam:=true;
END;
FOR i:=0 to StrToInt(wiederh.text) do begin
checkbox1.Checked:=false;   //Boxen löschen
checkbox2.Checked:=false;
checkbox3.Checked:=false;
checkbox4.Checked:=false;
grund:=true;
Pruefzahl:=Pruefzahl+2;
IF Langsam = true then effelo;  //für´n Langsam-Modus
editt.text:=IntToStr(pruefzahl);
Quer.caption:=Editt.text;
Quer2.caption:=Editt.text;
Label9.Caption:=Editt.Text;
jkl:=LENGTH(editt.text);
IF Langsam = true then effelo;  //für´n Langsam-Modus
edit1.Text:=IntToStr(i);

funf:=StrToInt(editt.Text[jkl]);   //Ist eine Fünf am Ende?;
  if funf = 5 then
  Grund := false                             
  else
  checkbox2.Checked:=true;
IF Langsam = true then effelo; // Ende Fünfprüfung

IF Grund = true then
        Quersumme;
IF Langsam = true then effelo;   //für´n Langsam-Modus
IF Grund = true then
        begin
          Siebtel:=Pruefzahl div 7 ;
          sub:=Pruefzahl div 7 ;
          Label10.Caption:=IntToStr(Siebtel);
          IF Langsam = true then effelo;    //für´n Langsam-Modus
          Label7.caption:=Editt.Text;
          IF Pruefzahl mod 7 = 0 then
          grund:=false
          else
          if Pruefzahl mod 7 <> 0 then checkbox3.Checked:=true;
        END;
IF Langsam = true then effelo;    //für´n Langsam-Modus
If grund = true then checkbox4.checked:=true; 
IF Grund = true then       //Durch Primzahlen teilen
BEGIN    //abc
    Table2.First;
    Table2.MoveBy(5);
  REPEAT
        bed  := false;
        Vergl:=StrToInt(DBEdit2.Text);
        Vergl2:=StrToInt(DBEdit2.Text);
        IF Pruefzahl mod Vergl = 0
        then bed := true
        else Table2.Next;
        IF Langsam = true then effe;   //für´n Langsam-Modus
  Until (Vergl2 > Sub) or (bed=true);
END;  //abc
IF (grund = true) and (bed = false) then
Begin
        Table2.Append;
        Table2.fieldByName('Zahl').AsInteger:= Pruefzahl;
        Table2.Post;
        Table2.Refresh;
END;
grund:=false;
end; //FOR
end; //Proz
end.

:lol: Bin eben Anfänger?!?

Code-Tag eingefügt. Marc


Hagbard Celine - Di 24.09.02 15:04

Fasi-Monster hat folgendes geschrieben:
Ist ein vereinfachtes Proggi um Primzahlen zu berechnen und abzuspeichern :


Hab deinen Quelltext jetzt mal leserlich gemacht!

So wo ist jetzt der Fehler?
Wo tritt er auf?

Welche Funktion rufst Du auf??
Was geschieht da überhaupt, ist etwas mühsam das auseinanderzufriehmeln!


Fasi-Monster - Di 24.09.02 15:12

also, das problem das mir widerfährt ist, dass wenn´s läuft, in den Edit- und Labelfeldern die Daten nicht aktualisiert werden. Ich kann die Zwischensummen nicht sehen(vor allem wenn ich die Bremsen"procedure effe&effelo" mitlaufen lasse).


Ex0rzist - Di 24.09.02 15:28

Hallo Fasi-Monster,

ich habe jetzt zwar nicht deinen Code durchgesehen, aber ich denke du benötigst: Application.ProcessMessages

Das baust du an das Ende einer Berechnungsschleife. Damit aktualisiert Windows alle anstehenden Messages (u.a. das Aktualisieren von Labels usw.) auch während einer Schleife.

Ich hoffe ich habe dein Problem erkannt. :roll:


_____________

Ex0rzist


Hagbard Celine - Di 24.09.02 15:30

Fasi-Monster hat folgendes geschrieben:
also, das problem das mir widerfährt ist, dass wenn´s läuft, in den Edit- und Labelfeldern die Daten nicht aktualisiert werden. Ich kann die Zwischensummen nicht sehen(vor allem wenn ich die Bremsen"procedure effe&effelo" mitlaufen lasse).


Also auf den ersten blick würde ich keinen fehler sehen!

Geh zuerst mal hin und ersetze die Zuweisungen zu editfeldern.txt durch ein memo-feld.lines.add() dann hast Du wohl einige Anzeigen, kannst aber vor allem sehen wie sich die Werte verändern!

Alle Werte stehen dann zwar in einem Memo-Feld, aber zur kontrolle ist das wohl besser!


Fasi-Monster - Mi 25.09.02 07:54

:D
Goil, dat lübt!!!
Danke an:
Ex0rzist & Hagbard Celine & JeanvanHees

Application.ProcessMessages
hat´s gebracht

Mit den Memo-Feldern habe ich noch nicht probiert aber ich mach mir eine Notiz
Bis zum nächsten mal...