Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler bei Übernahme von Text aus Edit (https://www.delphipraxis.net/158969-fehler-bei-uebernahme-von-text-aus-edit.html)

KPBecker 9. Mär 2011 18:47

Delphi-Version: 2010

Fehler bei Übernahme von Text aus Edit
 
Hallo, Delphi-Praktiker,
ich habe ein mir neues Problem, in ein Edit Text einzugeben und im Programm zu übernehmen.

Gegeben: Formular mit TEdit und einem Button
Ziel: Text aus Edit-Feld übernehmen (= auf String-Variable zuweisen), wenn Button "OnClick"

Problem: Es wird in der OnClick-Routine nur das übernommen, was als Vorgabe schon in edit.text steht, Änderungen werden nicht berücksichtigt.
ReadOnly ist false, ich kann auch ins Edit-Feld schreiben, übernommen wird aber immer nur, was vordefiniert war.

Beste Grüße
Klaus-Peter

s.h.a.r.k 9. Mär 2011 18:50

AW: Fehler bei Übernahme von Text aus Edit
 
Zeig mal den Code, den du dafür nutzt.

stahli 9. Mär 2011 18:51

AW: Fehler bei Übernahme von Text aus Edit
 
Liest Du vielleicht aus dem falschen Edit?
Delphi-Quellcode:
S := MyEdit.Text;
sollte zuverlässig funktionieren.

KPBecker 9. Mär 2011 19:00

AW: Fehler bei Übernahme von Text aus Edit
 
Code:
procedure TfrmTitel.btnAnmeldenClick(Sender: TObject);
//  Benutzer anmelden
begin
  Benutzer:= frmTitel.Edit1.Text;
  Passwort:= frmTitel.ledPasswort.Text;
  BenAnmelden;
end;
Benutzer ist ein global vereinbarter String.
Wie gesagt: Text, der schon im Objekt-Inspektor für Edit1.Text definiert wird, wird immer nach Benutzer zugewiesen, auch, wenn im Programmlauf - vor btnAnmeldenClick - manuell etwas anderes ins Edit-Feld geschrieben wurde.
KP

s.h.a.r.k 9. Mär 2011 19:11

AW: Fehler bei Übernahme von Text aus Edit
 
Globale Variablen sind schon sehr mal sehr böse, denn es kann sein, dass daher der Fehler kommt! Warum gibst du BenAnmelden nicht zwei Parameter, Benutzer und Passwort eben und übergibst diese?

Unüblich ist auch der Zugriff auf frmTitel. Mir ist schon klar, dass frmTitel eine globale Variable ist, aber wenn du mal eine weitere Instanz von TfrmTitel hast, dann greift dein Code nur auf eine zu, was falsch ist.

KPBecker 9. Mär 2011 19:15

AW: Fehler bei Übernahme von Text aus Edit
 
Hallo, shark,
probier ich gerne aus, aber:

Das Auslesen von Edit1.Text geht ja anscheinend prinzipiell (s. Vorbelegung).
Das nutzt in der Praxis natürlich nichts, man will ja in edit etwas eingeben/ändern und das dann übernehmen.
KP

s.h.a.r.k 9. Mär 2011 19:17

AW: Fehler bei Übernahme von Text aus Edit
 
Der Code, den du oben gezeigt hast, funktioniert zu 100%! Somit ebenso das Auslesen der geänderten Werte. Der Fehler liegt somit wo anders, ich glaub an diesen globalen Variablen.

KPBecker 9. Mär 2011 19:21

AW: Fehler bei Übernahme von Text aus Edit
 
Delphi-Quellcode:
procedure TfrmTitel.btnAnmeldenClick(Sender: TObject);
//  Benutzer anmelden
var
  ben, pw: string;
begin
  ben:= frmTitel.Edit1.Text;
  pw := frmTitel.ledPasswort.Text;
  BenAnmelden(ben, pw);
end;
Haltepunkt auf BenAnmelden gesetzt --> In ben steht nur der Text, der in Edit1 vordefiniert war.
???
KP

Luckie 9. Mär 2011 19:23

AW: Fehler bei Übernahme von Text aus Edit
 
Lass mal das frmTitel weg. Du befindest dich ja schon in der Klasse. Da kann Delphi etwas durcheinanderkommen.

stahli 9. Mär 2011 19:25

AW: Fehler bei Übernahme von Text aus Edit
 
Versuch mal als Test:
Delphi-Quellcode:
frmTitel.Edit1.Color := clRed;

Ich wette, dass Du ein falsches Edit benutzt.

WM_CLOSE 9. Mär 2011 19:30

AW: Fehler bei Übernahme von Text aus Edit
 
Ich glaube eher, du verwendest die falsche Instanz von TfrmTitel:
ersetze das
Delphi-Quellcode:
frmTitel.Edit1.Text;
durch
Delphi-Quellcode:
self.Edit1.Text;

KPBecker 9. Mär 2011 19:32

AW: Fehler bei Übernahme von Text aus Edit
 
Hallo, Luckie,

das darf nicht wahr sein:

Delphi-Quellcode:
procedure TfrmTitel.btnAnmeldenClick(Sender: TObject);
//  Benutzer anmelden
var
  ben, pw: string;
begin
  ben:= Edit1.Text;
  pw := ledPasswort.Text;
  BenAnmelden(ben, pw);
end;
Das geht !
Warum auch immer ???

Vielen dank allen Diskutanten
KP

stahli 9. Mär 2011 19:34

AW: Fehler bei Übernahme von Text aus Edit
 
Lade mal Dein Projekt als Zip hoch, dann können wir es Dir sicher erklären...

WM_CLOSE 9. Mär 2011 19:44

AW: Fehler bei Übernahme von Text aus Edit
 
Son Quatsch, ich kann es so erklären:

frmTitel ist eine globale Variable (oder fast)
Das Formular wird in dem dpr-file erzeugt:
Delphi-Quellcode:
CreateForm(frmTitel, TfrmTitel)
Dann kommt der programmierer und erzeugt in irgendeiner seiner funktionen ein anderes Formular. Das hat zwar den selben Typ, aber es ist ein seperates Formular.

Greift jetzt der programmierer auf die globale Varible zu, erhält er eben nur die Variablen der ersten Instanz.

Deshalb muss in Methoden einer Klasse immer auf die aktuelle
Instanz zugegriffen werden. Das erreicht man indem man self davorschreibt, oder es komplett weglässt.

stahli 9. Mär 2011 19:49

AW: Fehler bei Übernahme von Text aus Edit
 
Ich hatte 2 Ideen:

- 2 Formularinstanzen
- ein dynamisch erzeugtes Edit1 in der frmTitel.pas

Man kann es nicht wissen...

Sir Rufo 9. Mär 2011 19:51

AW: Fehler bei Übernahme von Text aus Edit
 
Füge mal diesen Code ein, dann sollte das klarer werden :mrgreen:
Delphi-Quellcode:
procedure TfrmTitel.btnAnmeldenClick(Sender: TObject);
// Benutzer anmelden
var
  ben, pw: string;
begin

  if Self <> frmTitel then
    ShowMessage( 'Ich Depp will doch auf die falsche Instanz zugreifen!' );

  ben:= Edit1.Text;
  pw := ledPasswort.Text;
  BenAnmelden(ben, pw);
end;

s.h.a.r.k 9. Mär 2011 19:53

AW: Fehler bei Übernahme von Text aus Edit
 
@Sir Rufo: Dein Beitrag ist aber nur FSK 18, wegen bösen Begriffen -- frag doch bitte erst mal nach dem Alter :mrgreen:

WM_CLOSE 9. Mär 2011 19:54

AW: Fehler bei Übernahme von Text aus Edit
 
@Stahli: "Edit1" dynamisch? nie und nimmer.:wink:
Da fress ich nen Besen wenn das dynamisch ist.

s.h.a.r.k 9. Mär 2011 19:55

AW: Fehler bei Übernahme von Text aus Edit
 
Dann hol ich schon mal einen Besen. Warum sollte er das nicht "überschreiben" können. Wenn er irgendwo
Delphi-Quellcode:
Edit1 := TEdit.Create(frmTitle) // etc
macht, dann ist das schneller passiert als man denkt ;) Das ist zwar sehr unwahrscheinlich, aber möglich.

Sir Rufo 9. Mär 2011 19:56

AW: Fehler bei Übernahme von Text aus Edit
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1087115)
@Sir Rufo: Dein Beitrag ist aber nur FSK 18, wegen bösen Begriffen -- frag doch bitte erst mal nach dem Alter :mrgreen:

Wieso datt denn?

Ok, ich habe das Johnny vergessen, das kann natürlich zu Missverständnissen führen :mrgreen:

Sir Rufo 9. Mär 2011 19:57

AW: Fehler bei Übernahme von Text aus Edit
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1087117)
Dann hol ich schon mal einen Besen. Warum sollte er das nicht "überschreiben" können. Wenn er irgendwo
Delphi-Quellcode:
Edit1 := TEdit.Create(frmTitle) // etc
macht, dann ist das schneller passiert als man denkt ;) Das ist zwar sehr unwahrscheinlich, aber möglich.

Und wie kommt dann der Vorgabetext da rein?

s.h.a.r.k 9. Mär 2011 19:57

AW: Fehler bei Übernahme von Text aus Edit
 
Ich seh schon, wir verstehen uns :mrgreen:

-- Edit:

Das sollte das //etc andeuten ;) Möglich wäre es jedenfalls.

KPBecker 9. Mär 2011 20:43

AW: Fehler bei Übernahme von Text aus Edit
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, Delphi-Praktiker,

wie gesagt:

1. Vielen Dank
2. Das muß ich mir erst noch genauer anschauen (warum ist der voreingestellte Text aus dem Objekt-Inspektor immer lesbar ?)
3. Trotzdem wie vorgeschlagen die zip-Datei (noch nicht viel Programm da)

KP

Sir Rufo 9. Mär 2011 20:48

AW: Fehler bei Übernahme von Text aus Edit
 
Ohne Worte
Delphi-Quellcode:
program InfektExpert;

uses
  Forms,
  InfektExpertHP in 'InfektExpertHP.pas' {frmTitel},
  GlobVar in 'GlobVar.pas',
  Einstellungen1 in 'Einstellungen1.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmTitel, frmTitel);
  Application.CreateForm(TfrmTitel, frmTitel);
  Application.CreateForm(TfrmTitel, frmTitel);
  Application.Run;
end.

stahli 9. Mär 2011 21:02

AW: Fehler bei Übernahme von Text aus Edit
 
...ein paar Worte machen vielleicht doch Sinn:

Hallo Klaus-Peter,

Du solltest den Programm-Quelltext erst mal nicht von Hand ändern.

Ein neues Programm sieht etwa so aus:
Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Wenn Du dann über das Delphi-Menü neue Formulare hinzufügst, ändert Delphi Den Programm-Quelltext. Da sollte man nicht drin herum pfuschen:wink:

Du erstellst 3 Instanzen Deines Formulars. Wenn dies wirklich mal nötig ist (kommt selten vor), kann man neue Formulatre auch zur Laufzeit später erzeugen.
Lösche mal 2 Deiner CreateForm-Zeilen.

himitsu 9. Mär 2011 21:09

AW: Fehler bei Übernahme von Text aus Edit
 
Und schon haben wir einen Beweiß, daß diese globalen Form-Variablen sche**e sind.
Ich vordere ja schon lange, daß dieser Mist endlich mal abgeschaft wird.
> eine "lokale" Variable nur innerhalb der DPR könnte man sich selber basteln, aber schöner wäre es, wenn man karkeine verwenden müßte, wenn man zum Erstellen diese CreateForm-Methoden verwendet.

Und nun nochmal der Grund, warum es hier schief lief.
PS: Es wurde immer das ausgelesen, was DU von Delphi verlangt hast. :zwinker:

- Delphi blendet automatisch nur das Hauptformular an, welches standardmäßig das erste erstellte Formular ist.
- die anderen Forms bleiben unsichtbar, da dort standardmäßigg Visible auf False steht
- die globale Variable wurde mehrfach überschrieben und es war dadurch die zuletzt erstlette Form darin verlinkt
- tja, da du nun unbedingt diese blöde Globale nutzen wolltest, hast du somit immer den Text aus dessen Edits ausgelesen,
aber nur die Edits einer anderen, sichtbaren Form geändert :stupid:

KPBecker 10. Mär 2011 08:08

AW: Fehler bei Übernahme von Text aus Edit
 
Hallo, Delphi-Praktiker,

man weiß ja vielleicht oft nicht, was man tut.
In diesem Fall bin ich allerdings ganz sicher, daß ich weder die Zeile
Delphi-Quellcode:
Application.CreateForm(TfrmTitel, frmTitel);
"getripelt" habe noch in diesem Programmteil irgendwelche Änderungen vorgenommen habe.
Diesen initialen Code packe ich nie an, daher habe ich wahrscheinlich auch jetzt nicht dort nachgeschaut.
Bei welcher Gelegenheit Delphi das getan hat, ist mir unklar. Der von mir bemerkte "Fehler" trat von Anfang an auf.
KPB

KPBecker 10. Mär 2011 08:16

AW: Fehler bei Übernahme von Text aus Edit
 
Frage schließen.


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