![]() |
Inkompatible Typen: Char und 'String'
Hallo alle zusammen
Ich will einfach nur bei einer aktiven Checkbox die PasswordChar eigenschaft eines Edits verändern. Das ist mein Quelltext:
Delphi-Quellcode:
Nun erhalte ich diese Fehlermeldung:
procedure TForm5.CheckBox1Click(Sender: TObject);
begin if CheckBox1.Checked = true then Edit2.PasswordChar := '#0' else Edit2.PasswordChar := '*'; end; Inkompatible Typen: Char und 'String' Was müsste Ich verändern? ein Char('*') bringt die Fehlermeldung: Ungültige Typenumwandlung |
Re: Inkompatible Typen: Char und 'String'
/edit: bei mir funktioniert
Delphi-Quellcode:
wunderbar
form1.MaskEdit1.PasswordChar := char('*');
/edit2:
Delphi-Quellcode:
ohne 's
form1.MaskEdit1.PasswordChar := #0;
/edit3: zu spät :mrgreen: |
Re: Inkompatible Typen: Char und 'String'
er versucht dem Passwordchar mehr als ein Zeichen zu zuweisen
Zitat:
ich denke hier ist #0 und nicht '#0' gemeint. |
Re: Inkompatible Typen: Char und 'String'
Delphi-Quellcode:
Tante Edith meint: Mist, Sir Thornberry war schneller. :thumb:
procedure TForm5.CheckBox1Click(Sender: TObject);
begin if CheckBox1.Checked = true then Edit2.PasswordChar := #0 else Edit2.PasswordChar := '*'; end; |
Re: Inkompatible Typen: Char und 'String'
Delphi-Quellcode:
Edit2.PasswordChar := #0
Edit2.PasswordChar := #42 |
Re: Inkompatible Typen: Char und 'String'
Ok vielen Dank ging ja echt fix. Eig. hätte man selbst drauf kommen können:(
Vielen Dank an euch alle. |
Re: Inkompatible Typen: Char und 'String'
Vielleicht sollte man noch auf das "= true" hinweisen - CheckBox1.Checked ist schon ein boolscher Ausdruck
Da braucht man nicht noch einen boolschen Ausdruck auf einen boolschen Zustand prüfen
Delphi-Quellcode:
besser:
begin
if CheckBox1.Checked = true then Edit2.PasswordChar := #0 else Edit2.PasswordChar := '*'; end;
Delphi-Quellcode:
begin
if CheckBox1.Checked then Edit2.PasswordChar := #0 else Edit2.PasswordChar := '*'; end; |
Re: Inkompatible Typen: Char und 'String'
Hallo,
soll eine Funktion erstellen, die ein vorher in einem edit-Fenster eingegebenes Zeichen löscht. bekomme aber die Fehlermeldung (86): Inkompatible Typen: Char und String
Delphi-Quellcode:
Was stimmt nicht?
procedure TForm1.Button4Click(Sender: TObject);
var i, ende: integer; var z, l, a: string; begin ende := length(a); a := edit1.text[i]; l := ''; z := edit2.text; while i <= ende do begin if a[i] = z then a[i] := l end; begin label1.caption := a; end; end; Dankeschön |
Re: Inkompatible Typen: Char und 'String'
Apfel != Birnen.
Entweder z und l als Char deklarieren oder durch z[1] und l[1] ersetzen. |
Re: Inkompatible Typen: Char und 'String'
danke schonmal..
habs aber noch nicht ganz (kenne mich in Delphi kaum aus...) also mein Programm sieht nun so aus
Delphi-Quellcode:
aber es stimmt noch was nicht...hängt mit dem l:= '' zusammen...
procedure TForm1.Button4Click(Sender: TObject);
var i, ende: integer; var a, u: string; var z, l: char ; begin ende := length(a); i := 0; l := ''; while i <= ende do begin a := edit1.text[i]; z := edit3.text[i]; u := a; if a[i] = z then u[i] := l end; label1.caption := u; end; end. kann nur grad die Fehlermeldung nicht nennen, da mein Delphi grad gar nichts laden will... |
Re: Inkompatible Typen: Char und 'String'
Ein Char kann nicht leer sein - es enthält immer exakt ein Zeichen.
|
Re: Inkompatible Typen: Char und 'String'
okay, danke! Und wie kann ich dann auf einem anderen Weg erreichen, dass ein Zeichen gelöscht wird?
Ziel ist ja, dass ich ein Wort (z.B. Stuttgart) eingebe, und ein Zeichen (z.B. t) eingebe, und dann in dem Beispiel alle 't' aus dem Wort 'Stuttgart' gelöscht werden, so dass nur noch "Sugar" ausgegeben wird. |
Re: Inkompatible Typen: Char und 'String'
Schau dir mal StringReplace() an
|
Re: Inkompatible Typen: Char und 'String'
Wenn Du ein Zeichen im String "z" löschen willst, dann
Delphi-Quellcode:
aber Du müsstest dann rückwärts durch den String gehen, da z ja u.U. immer kürzer wird und "ende" dann über den String hinaus zeigt.
if a[i] = z then Delete(z,i,1)
Dann hast Du (soweit ich das sehe) eine Enlosschleife mit while, weil Du "i" nicht veränderst (immer i = ende = 0) Dann innerhalb der Schleife Zuweisung an "a" und "z", was irgenwie alles nutzlos macht ;) |
Re: Inkompatible Typen: Char und 'String'
dankeschön für eure Tipps :)
hat mir echt geholfen habs nun auch - fast! einziges Problem: das Wort "Stuttgart" liefert bei der Aufforderung, alle t zu löschen, "Sutgar" kann ich da noch was dementsprechend ändern? Oder müsste ich dann nochmal alles umschmeißen?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; var a, z: string; begin a := edit1.text; for i := 1 to length(a) do begin z := edit2.text ; if a[i] = z then delete(a,i,1); end; label1.caption := a; end; end. end. |
Re: Inkompatible Typen: Char und 'String'
Delphi-Quellcode:
Von hinten durch den String, sehe ich jetzt so auf den ersten Blick.
for i := length(a) downto 1 do
Du musst ja bedenken, das der String immer kürzer wird und am Ende nicht mehr Length(a) hat. Dazu musst Du auch wissen, das die for-Schleife sich beim ersten Durchlauf Length(a) merkt und den wert nicht an die neue Länge anpasst. €: Das doppelte end. kann auch weg, müsste Delphi sogar darauf hinweisen. Zuweisung an z aus der Schleife raus, das ändert sich ja nicht ständig:
Delphi-Quellcode:
PS: bei Deinem letzten Code-Beispiel hat man schon gesehen, das Du die Vorschläge umgesetzt hast, auch wenn nicht alles war wohl zu viel. Achte ein bischen auf die Formatierung (also Einrückung), dann siehst Du besser wenn sich mal ein doppeltes End oder Begin eingeschlichen hat.
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; a, z: string; begin a := edit1.text; z := edit2.text; for i := length(a) downto 1 do begin if a[i] = z then delete(a,i,1); end; label1.caption := a; end; end. PPS: Der Vorschlag von mkinzler darfst Du Dir jetzt auch anschauen. Da hättest Du nicht sooo viel gelernt, aber wärst vor einer Stunde mit der Aufgabe fertig gewesen ;) |
Re: Inkompatible Typen: Char und 'String'
Hallo,
@Melli012345 hab' hier 'ne Funktion zum Löschen von Zeichen in Verzeichnissen/Pfaden, lässt sich mit wenig AUfwand für deine Zwecke "umbauen"
Delphi-Quellcode:
function CheckInvalidChars(const FilePath: String): String; // replace invalid Path-File-Chars
var sFilePath, sFileName: String; l, i : Integer; Const RePath : array[1..13] of String = ('/', '*', '?', '"', '<', '>', '|', '!', '§', '$', '%', '&', '#'); // Chars to replace in Path ReFile : array[1..15] of String = ('/', '\', ':', '*', '<', '>', '?', '"', '|', '!', '§', '$', '%', '&', '#'); // Chars to replace in File ReP : String = '_'; // replace invalid chars in Path with '_' ReF : String = '_'; // replace invalid chars in File with '_' begin l := 0; for i := 1 to Length(FilePath) do begin if FilePath[i] = '\' then l := i; end; sFileName := copy(FilePath, l+1, length(FilePath)-l+1); sFilePath := copy(FilePath, 0, l); // File - Path, check and replace for i := 1 to 13 do sFilePath := StringReplace(sFilePath, RePath[i], ReP, [rfReplaceAll, rfIgnoreCase]); // File - Name, check and replace for i := 1 to 15 do sFileName := StringReplace(sFileName, ReFile[i], ReF, [rfReplaceAll, rfIgnoreCase]); Result := sFilePath + sFileName; end; |
Re: Inkompatible Typen: Char und 'String'
Wobei natürlich jede Lösung mit StringReplace den Haken hat, das Zeichen getauscht und nicht gelöscht werden können.
|
Re: Inkompatible Typen: Char und 'String'
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz