Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inkompatible Typen: Char und 'String' (https://www.delphipraxis.net/128896-inkompatible-typen-char-und-string.html)

Crazymodder 8. Feb 2009 20:19


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:
procedure TForm5.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked = true then
    Edit2.PasswordChar := '#0'
  else
    Edit2.PasswordChar := '*';
end;
Nun erhalte ich diese Fehlermeldung:
Inkompatible Typen: Char und 'String'

Was müsste Ich verändern?
ein Char('*') bringt die Fehlermeldung:
Ungültige Typenumwandlung

craash 8. Feb 2009 20:22

Re: Inkompatible Typen: Char und 'String'
 
/edit: bei mir funktioniert
Delphi-Quellcode:
form1.MaskEdit1.PasswordChar := char('*');
wunderbar

/edit2:
Delphi-Quellcode:
form1.MaskEdit1.PasswordChar := #0;
ohne 's
/edit3: zu spät :mrgreen:

SirThornberry 8. Feb 2009 20:24

Re: Inkompatible Typen: Char und 'String'
 
er versucht dem Passwordchar mehr als ein Zeichen zu zuweisen
Zitat:

Delphi-Quellcode:
Edit2.PasswordChar := '#0'

nämlich # und 0
ich denke hier ist #0 und nicht '#0' gemeint.

nuclearping 8. Feb 2009 20:24

Re: Inkompatible Typen: Char und 'String'
 
Delphi-Quellcode:
procedure TForm5.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked = true then
    Edit2.PasswordChar := #0
  else
    Edit2.PasswordChar := '*';
end;
Tante Edith meint: Mist, Sir Thornberry war schneller. :thumb:

taaktaak 8. Feb 2009 20:24

Re: Inkompatible Typen: Char und 'String'
 
Delphi-Quellcode:
Edit2.PasswordChar := #0
Edit2.PasswordChar := #42

Crazymodder 8. Feb 2009 20:27

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.

Helmi 8. Feb 2009 20:45

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:
begin
  if CheckBox1.Checked = true then
    Edit2.PasswordChar := #0 
  else
    Edit2.PasswordChar := '*';
end;
besser:

Delphi-Quellcode:
begin
  if CheckBox1.Checked then
    Edit2.PasswordChar := #0 
  else
    Edit2.PasswordChar := '*';
end;

Melli012345 9. Jun 2009 19:20

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:
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;
Was stimmt nicht?
Dankeschön

mkinzler 9. Jun 2009 19:21

Re: Inkompatible Typen: Char und 'String'
 
Apfel != Birnen.
Entweder z und l als Char deklarieren oder durch z[1] und l[1] ersetzen.

Melli012345 9. Jun 2009 19:43

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:
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.
aber es stimmt noch was nicht...hängt mit dem l:= '' zusammen...
kann nur grad die Fehlermeldung nicht nennen, da mein Delphi grad gar nichts laden will...

rwachtel 9. Jun 2009 19:56

Re: Inkompatible Typen: Char und 'String'
 
Ein Char kann nicht leer sein - es enthält immer exakt ein Zeichen.

Melli012345 9. Jun 2009 20:02

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.

mkinzler 9. Jun 2009 20:06

Re: Inkompatible Typen: Char und 'String'
 
Schau dir mal StringReplace() an

Satty67 9. Jun 2009 20:09

Re: Inkompatible Typen: Char und 'String'
 
Wenn Du ein Zeichen im String "z" löschen willst, dann
Delphi-Quellcode:
if a[i] = z then Delete(z,i,1)
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.

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 ;)

Melli012345 9. Jun 2009 20:53

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.

Satty67 9. Jun 2009 21:06

Re: Inkompatible Typen: Char und 'String'
 
Delphi-Quellcode:
for i := length(a) downto 1 do
Von hinten durch den String, sehe ich jetzt so auf den ersten Blick.

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:
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.
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.

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 ;)

markus5766h 9. Jun 2009 21:22

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;

Satty67 10. Jun 2009 06:49

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.

mkinzler 10. Jun 2009 10:07

Re: Inkompatible Typen: Char und 'String'
 
Zitat:

Wobei natürlich jede Lösung mit StringReplace den Haken hat, das Zeichen getauscht und nicht gelöscht werden können.
Doch man kann doch durch '' ersetzen, dann wird das Zeichen gelöscht.
Zitat:

sZucker := StringReplace('Stuttgart', 't', '', [rfReplaceAll]);


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