Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   MessageDlg - Schleifen Problem (https://www.delphipraxis.net/175063-messagedlg-schleifen-problem.html)

No3ody 28. Mai 2013 16:57

Delphi-Version: 5

MessageDlg - Schleifen Problem
 
Hey Leute. Ich habe folgendes Problem: Meine Aufage ist es ein beliebiges Zeichen in einer beliebigen Zeichenkette ausfindet zu machen, indem es durch knopfdruck groß geschrieben wird. Das bekomme ich soweit auch noch hin. Wenn dieses beliebige Zeichen jedoch nicht in der Zeichenkette vorhanden ist, soll eine Messagebox mit "nicht vorhanden" erscheinen. Dort trifft es bei mir auf Probleme.

So sieht es bei mir momentan aus:
procedure TForm1.Button1Click(Sender: TObject);
var
j,i:Integer;
z,x:string;
begin
j:=length(edit1.Text);
x:=edit1.Text;
for i := 1 to j do
begin
if edit2.Text[1]=edit1.Text[i] then
begin
z:=ansiuppercase(x[i]);
delete(x,i,1);
insert(z,x,i);
edit1.text:=x;
end;
end;
end;


Wenn ich "MessageDlg('nicht vorhanden.', mtInformation, [mbOK], 0);" reinschreibe muss ich zuvor eine schleife programmieren. Ich war vorhin soweit, dass er mir je nach Zeichenkettenlänge x, x mal "nicht vorhanden" geschrieben hat.

Der schöne Günther 28. Mai 2013 17:03

AW: MessageDlg - Schleifen Problem
 
Hallo.

Bitte pack den Quelltext in (Delphi)(/Delphi)-Tags (mit eckigen Klammern), dann kann man ihn auch vernünftig lesen. Hier einmal in einer augenfreundlicheren Variante:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   j, i: Integer;
   z, x: string;
begin
   j := length(edit1.Text);
   x := edit1.Text;

   for i := 1 to j do
   begin
      if edit2.Text[1] = edit1.Text[i] then
      begin
         z := ansiuppercase(x[i]);
         delete(x, i, 1);
         insert(z, x, i);
         edit1.Text := x;
      end;
   end;

end;
Dann siehst du wohl auch einfacher, dass du den Dialog hinter das end; der for-Schleife packen musst. Wie du schon richtig sagst, muss die for-Schleife zuvor passieren.

Dalai 28. Mai 2013 17:11

AW: MessageDlg - Schleifen Problem
 
  1. Bitte DELPHI-Tags (das Helmsymbol im Forum-Editor) - oder wenigstens CODE-Tags verwenden, denn so ist dein Code viel zu mühsam zu lesen!
  2. Bitte Code ordentlich einrücken. Bei den paar Zeilen mag das noch nicht so kritisch sein, aber wenn der Code länger wird, ist saubere Einrückung unabdingbar!
  3. Verwende aussagekräftige Variablenbezeichner! x, z, edit1 und edit2 sind nicht aussagekräftig. Im Moment magst du noch wissen, welche Variable was bezeichnet und wofür sie gut ist, aber ein anderer, der in den Code schaut, muss sich erst reinlesen, und auch du selbst wirst in Wochen/Monaten erstmal überlegen müssen, was du da geschrieben hast.

So, genug der "Standpauke", nun zum Problem: Ohne jetzt den Code komplett umzuschreiben (es bietet sich eine Funktion mit Boolescher Rückgabe an, die besagt, ob das Zeichen gefunden wurde), fällt mir dies auf Anhieb ein:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  j,i:Integer;
  z,x:string;
  found: Boolean;
begin
    found:= False;
    j:= length(edit1.Text);
    x:= edit1.Text;
    for i := 1 to j do
    begin
        if edit2.Text[1]=edit1.Text[i] then
        begin
            found:= True;
            z:=ansiuppercase(x[i]);
            delete(x, i, 1);
            insert(z, x, i);
            edit1.text:= x;
        end;
    end;
    if NOT found then ShowMessage('nicht gefunden');
end;
MfG Dalai

No3ody 28. Mai 2013 17:28

AW: MessageDlg - Schleifen Problem
 
Vielen Dank für eure schnellen Antworten. Mein Problem wurde gelöst:)
Tut mir leid, dass ich den Code nicht richtig eingefügt habe. Toll, dass ihr mir trotzdem geholfen habt.


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