Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - inhalt aus bezeichner löschen


kattzze - Sa 27.09.08 20:35
Titel: inhalt aus bezeichner löschen
Ich habe da gleich noch eine frage.

wie kann ich denn den inhalt von bezeichnern leeren?
bei den editfeldern ist das ja ganz simpel aber wenn ich das mit den bezeichnern genauso mache, bekomme ich einen fehler angezeigt!

also die editfelder habe ich so gelöscht : edit1.text:=''

Moderiert von user profile iconGausi: Abgetrennt von [url=http://www.delphi-forum.de/viewtopic.php?t=86851]hier[/url].


Marc. - Sa 27.09.08 20:44
Titel: Re: inhalt aus bezeichner löschen
user profile iconkattzze hat folgendes geschrieben:
wenn ich das mit den bezeichnern genauso mache, bekomme ich einen fehler angezeigt!

Wie sieht dein Bezeichner aus? Welcher Fehler wird gemeldet? So muss ich leider einfach mal ins Blaue raten: Lass das .Text weg. ;)

€: Wie immer gilt eigentlich, für jede Frage ein eigener Thread. Sonst wirds hier hinterher ziemlich chaotisch.


kattzze - So 28.09.08 16:14
Titel: Re: inhalt aus bezeichner löschen
Ích habe zwei globale bezeichner als typ byte deklariert.

Wenn ich jetz also mein programm starte und dann einmal etwas berechne(es ist ein programm um potezen zu berechnen) und keine genaue ösung raus kommt gibt er mir an, dass die zahl sagen wir zwischen 2 und drei liegt. Wenn ich dann die editfelder leere, sagt er mir nur noch die höhere zahl und keine zwischenlösungen mher. Mir wurde gasagt, dass das daran liegt, dass die bezeichner nicht geleert werden.

Desshalb diese frage.

Vielleicht liegt es ja auch an etwas anderem und jemand weiß woran.
Das wäre natürlich auch gut!


Gausi - So 28.09.08 16:19

Dann würde ich den "Bezeichnern" einfach wieder den Wert Null zuweisen. Also MeineByteVariable := 0;. Oder verstehe ich das was komplett falsch? :gruebel:


kattzze - So 28.09.08 16:38

du verstehst das schon richtig!
genau das sollte gamacht werden nur dann gibt as programm immer nur eine zahl zurück.
vielleicht gibs ja komplikationen mit dem restlichen proramm?


Delete - So 28.09.08 16:54

Die Übergabeparameter heißen genauso wie die globalen Variablen. Dadurch werden diese innerhalb der Funktionen nicht geändert.


kattzze - So 28.09.08 17:12

könntest du einen vorschlag machen. wie ich das anders schreiben kann?


Delete - So 28.09.08 17:25

Benenn doch einfach entweder die globalen Variablen oder die Übergabeparameter um, so dass Du eindeutig weißt, worauf Du aktuell überhaupt zugreifst.


kattzze - So 28.09.08 17:34

user profile iconDeddyH hat folgendes geschrieben:
Benenn doch einfach entweder die globalen Variablen oder die Übergabeparameter um, so dass Du eindeutig weißt, worauf Du aktuell überhaupt zugreifst.


woher weiß ich denn, wann ich auf die globalen und wann auf die anderen zugreife?


Delete - So 28.09.08 17:35

Das scheint ja gerade Dein Problem zu sein. Überleg Dir einmal, ob Du aus den Funktion nicht besser Prozeduren machst, in denen Du die globalen Variablen änderst.


kattzze - So 28.09.08 17:38

user profile iconDeddyH hat folgendes geschrieben:
Das scheint ja gerade Dein Problem zu sein. Überleg Dir einmal, ob Du aus den Funktion nicht besser Prozeduren machst, in denen Du die globalen Variablen änderst.


Ja genau das ist mein problem! Ich soll das ja mit funltionen schreiben.


Delete - So 28.09.08 17:48

Dann benenn doch einfach die globalen Variablen um und schau, was passiert.


kattzze - So 28.09.08 17:53

user profile iconDeddyH hat folgendes geschrieben:
Dann benenn doch einfach die globalen Variablen um und schau, was passiert.


Hab ich gemacht.
Macht trotzdem den selben fehler!
Man is das ein schei* programm


Delete - So 28.09.08 18:33

Es ist doch Dein Programm, dann ändere das ;)


kattzze - So 28.09.08 18:36

user profile iconDeddyH hat folgendes geschrieben:
Es ist doch Dein Programm, dann ändere das ;)


Wenn ich wüsste wie, würde ich hier nicht fragen. :!:
Außerdem weiß ich ja nichtmal genau wo nun der fehler liegt! Weil er nach allem was ich versicht habe immernoch bestand.


Delete - So 28.09.08 18:40

Also nochmal: globale Variablen gelten eigentlich programmweit. Wenn Du allerdings lokale Variablen (dazu zählen auch Übergabeparameter) mit demselben Namen deklarierst, haben diese innerhalb der Funktion/Prozedur/Methode Vorrang. Eine Quick&Dirty-Lösung wäre z.B. sowas:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var a,b: integer; //globale Variablen
...

function Tuwas(c,d: integer): integer;
begin
  a := c;  //Ändern der globalen Variablen a
  b := d;  //Ändern der globalen Variablen b
  Result := a/b;
end;


kattzze - So 28.09.08 18:55

Deine ideen sind ja alle soweit richtig, nur leider beheben sie den Fehler nich!
Sorry

:autsch:


Delete - So 28.09.08 18:56

Entschuldige, aber ohne ein bisschen Eigeninitiative Deinerseits kommen wir wohl nicht weiter.


Timosch - So 28.09.08 19:56

Zeig mal den Code, den du jetzt hast. Ich hab das Gefühl, dass hier irgendjemand was falsch versteht.
Nicht anhängen, sondern einfach den relevanten Teil der Unit in Delphi-Tags in den Beitrag schreiben.


kattzze - Mo 29.09.08 18:06


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:
implementation
  var basis, exponent: byte  ;
  var ganzzahlig:boolean=false;
      
{$R *.dfm}

function FktPotenz(basis, exponent: byte) : int64;
var produkt: int64;
    i : byte;
  Begin
   produkt:= 1;
   for i := 1 to exponent do
   produkt:= produkt * basis;
   FktPotenz:=produkt;
  end;

function FktBasis(exponent: Byte; potenz:Int64):Byte;
  begin
    basis:=0;
    while FktPotenz(basis, exponent)< potenz do
    basis:= basis+1;
    if Potenz=FktPotenz(basis,exponent) then
    ganzzahlig:= true;
    FktBasis:= basis;
  end;

procedure TForm1.Button2Click(Sender: TObject);
  begin
  basis:=strtoint(edit1.text);
  exponent:=strtoint(edit2.text);
  edit3.text:=inttostr(FktPotenz(basis,exponent))
  end;


procedure TForm1.Button4Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
basis:=0 ;
exponent:=0 ;
end;


procedure TForm1.Button3Click(Sender: TObject);
var potenz: byte;
 begin
  exponent:=strtoint(edit2.text);
  potenz:= strtoint(edit3.text);
  edit1.Text:=inttostr(FktBasis(exponent,potenz));
  if ganzzahlig= false then
  edit1.Text:= 'zahl liegt zwischen ' + IntToStr(FktBasis(exponent,potenz)-1)+ ' und '+ IntToStr(FktBasis(exponent, potenz))
  else
  edit1.Text:= IntToStr(FktBasis(exponent,potenz));
 end;


Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt


Delete - Mo 29.09.08 18:12

Setz das ganz in Delphi-Tags!Dann ist es leserlicj!!!!!!

Delphi-Quelltext
1:
                    


kattzze - Mo 29.09.08 18:18

hatte ich hinterher denn auch rausgefundne wies geht!
mustte es erst suchen! :lol:


Andreas L. - Mo 29.09.08 19:33


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  var basis, exponent: byte  ;
  var ganzzahlig:boolean=false;
      
{$R *.dfm}

function FktPotenz(basis, exponent: byte) : int64;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  
  var Fbasis, Fexponent: byte  ; //F angefügt weils ein Feld ist
  var ganzzahlig:boolean=false;
      
{$R *.dfm}

function FktPotenz(basis, exponent: byte) : int64;


Das meinte DeddyH. Und jetzt klappts bestimmt auch ;-)


Delete - Mo 29.09.08 20:22

Endlich mal jemand, der mich versteht.:mrgreen: