Problem:Incompatible types: got "TStrings" expected "TEdit"

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Problem:Incompatible types: got "TStrings" expected "TEdit"

Beitrag von jaslaz »

Das Programm zeigt mir an der angegebenen Stelle immer diese Fehlermeldung: Error: Incompatible types: got "TStrings" expected "TEdit"
Wie kann ich das Problem beheben?

Code: Alles auswählen

implementation
 
{ TForm1 }
 
Var geheim: Tstrings;
 
 
procedure load;
begin
geheim:=Tstringlist.Create;
geheim.LoadFromfile('x.txt');
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (edit1.text ='Person 1') and (edit2.text='Passw1') and (checkbox1.checked) or
     (edit1.text ='Person 2')  and (edit2.text='Passw2') and (checkbox2.checked) then
     edit3:={hier zeigt er die Fehlermeldung}geheim else
     edit3.clear;
 
 
 
end;
 
 
 
initialization
übrigens das soll so ne Art Passwortschutz werden

Danke schon mal im vorraus

Benutzeravatar
theo
Beiträge: 10895
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem:Incompatible types: got "TStrings" expected "TEdit"

Beitrag von theo »

Du kannst nicht eine TStringList direkt einem TEdit zuweisen, das sind ganz verschieden Dinge.
Du kannst aber den Textinhalt zuweisen:

edit3.text:=geheim.text;

übrigens: Vergiss nicht, die StringList wieder freizugeben, wenn du sich nicht mehr brauchst:

geheim.free;

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Problem:Incompatible types: got "TStrings" expected "TEdit"

Beitrag von jaslaz »

theo hat geschrieben: übrigens: Vergiss nicht, die StringList wieder freizugeben, wenn du sich nicht mehr brauchst:

geheim.free;
Wo muss das Geheim.free denn dann hin ?

Benutzeravatar
theo
Beiträge: 10895
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem:Incompatible types: got "TStrings" expected "TEdit"

Beitrag von theo »

jaslaz hat geschrieben:
theo hat geschrieben: übrigens: Vergiss nicht, die StringList wieder freizugeben, wenn du sich nicht mehr brauchst:

geheim.free;
Wo muss das Geheim.free denn dann hin ?
Kommt drauf an. Auf jeden Fall, wenn du es nicht mehr brauchst.

Normalerweise erstellt man sowas im Konstruktor oder im OnCreate Ereignis des Formulars und gibt es im Destruktor oder OnDestroy wieder frei.
Wenn du es bereits früher nicht mehr benötigst, kannst du es auch früher freigeben. Spart Speicher. Ich sehe ja nicht wo du z.B. load aufrufst.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Problem:Incompatible types: got "TStrings" expected "TEdit"

Beitrag von Scotty »

Mach am besten eine Funktion draus:

Code: Alles auswählen

function Geheim:string
var sl:TStringList;
begin
  sl:=TStringList.Create;
  try
    sl.LoadFromFile('xy.txt');
   Result:=sl[0];//der erste Eintrag der LIste wird dem Ergebnis der Funktion zugewiesen
  finally
    sl.free;//ein try-finally-Block wird immer ausgeführt; damit ist das free sicher gestellt
  end;
end;
 
edit1.text:=Geheim;
Besonders geheim ist das Vorgehen allerdings nicht, weil in der Textdatei wahrscheinlich Klartext steht. Außerdem könntest du die Funktion auch als eine private Methode in die Klasse aufnehmen.

Code: Alles auswählen

type
  TForm1=class(TForm)
    ...
  private
    function LoadPasswordFromFile(const aFileName:string):string;
  ...
  end;
 
function TForm1.LoadPasswordFromFile(const aFileName:string):string;
var sl:TStringList;
begin
  sl:=TStringList.Create;
  try
    sl.LoadFromFile(aFileName);
   Result:=sl[0];//der erste Eintrag der LIste wird dem Ergebnis der Funktion zugewiesen
  finally
    sl.free;//ein try-finally-Block wird immer ausgeführt; damit ist das free sicher gestellt
  end;
end;
 
edit1.Text:=LoadPasswordFromFile('xy.txt');
Eine Fehlerquelle wäre bei einer Stringlist, dass mehr als eine Zeile in der Eingabedatei sind.

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Problem:Incompatible types: got "TStrings" expected "TEdit"

Beitrag von jaslaz »

Scotty hat geschrieben:

Code: Alles auswählen

function LoadPasswordFromFile(const aFileName:string):string;
  ...
  end;
 
Was kommt bei diesem ... hin ?

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Problem:Incompatible types: got "TStrings" expected "TEdit"

Beitrag von carli »

Das, was er oben in dem Post schon geschrieben hat

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Problem:Incompatible types: got "TStrings" expected "TEdit"

Beitrag von Euklid »

jaslaz hat geschrieben:
Scotty hat geschrieben:

Code: Alles auswählen

function LoadPasswordFromFile(const aFileName:string):string;
  ...
  end;
 
Was kommt bei diesem ... hin ?
Unter "private" werden alle functions und procedures und Variablen deklariert, auf die nur die Klasse selbst Zugriff haben soll.

- Euklid

Antworten