Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Inhaltsabfrage in Delphi 10.2 (https://www.delphipraxis.net/197849-inhaltsabfrage-delphi-10-2-a.html)

iTzElKay 11. Sep 2018 10:04

Delphi-Version: 10.2 Tokyo

Inhaltsabfrage in Delphi 10.2
 
Guten Tag liebe Community,

und zwar bin ein gnadenloser Anfänger im Bereich Delphi und beschäftige mich nun seit ein paar Tagen damit. Ich wollte fragen, ob es irgendwie eine Abfragemöglichkeit gibt, um in einem Memo (z.B.) nach bestimmten Charakteren zu suchen. In meinem Fall erstelle ich zum Üben einen Taschenrechner, der dem bei Windows ähnelt. Wird hier eine die "Kommataste" gedrückt, soll ein Komma erscheinen, jedoch bei erneutem Betätigen nicht. Ich bin gerade nicht sicher, wie ich das angehen soll.

Vielen Dank für eure Hilfe!

mkinzler 11. Sep 2018 10:06

AW: Inhaltsabfrage in Delphi 10.2
 
Pos/PosEx(), StrScan(), ...

Delphi-Quellcode:
if Pos( ',', Memo.Lines.Text) < 1 then //Noch kein Komma

hoika 11. Sep 2018 10:21

AW: Inhaltsabfrage in Delphi 10.2
 
Hallo,
beim OnKeyPress des Memos kannst du Key=#0 setzen, dass verhindert, dass das Zeichen in das Memo eingetragen wird.
Jetzt noch davor die Prüfung siehe der Thread über mir.

iTzElKay 11. Sep 2018 11:18

AW: Inhaltsabfrage in Delphi 10.2
 
Vielen Dank für deine Antwort. Problem hat sich somit gelöst!

himitsu 11. Sep 2018 11:31

AW: Inhaltsabfrage in Delphi 10.2
 
Zitat:

Zitat von mkinzler (Beitrag 1412930)
Pos/PosEx(), StrScan(), ...

Delphi-Quellcode:
if Pos( ',', Memo.Lines.Text) < 1 then //Noch kein Komma

Delphi-Referenz durchsuchenContainsText Delphi-Referenz durchsuchenContainsStr
Delphi-Referenz durchsuchenTStringHelper.Contains Delphi-Referenz durchsuchenTStringHelper.IndexOf
...

oder andersrum
Delphi-Referenz durchsuchenIndexStr Delphi-Referenz durchsuchenIndexText Delphi-Referenz durchsuchenMatchStr Delphi-Referenz durchsuchenMatchText

iTzElKay 11. Sep 2018 12:09

AW: Inhaltsabfrage in Delphi 10.2
 
Liste der Anhänge anzeigen (Anzahl: 1)
@himitsu - auch dir ein Danke.
Hätte noch eine Frage, die aber nicht zum Thema passt - hoffe es ist okay, wenn ich sie gerade hier stelle:
Und zwar habe ich das bei meinem Taschenrechner so geregelt, dass die Eingabe vom Benutzer in einem TMemo gespeichert wird. Erste Zeile = erste Eingabe, zweite Zeile = Rechenoperator, dritte Zeile = zweite Eingabe - beim Entern dann das Ergebnis in einem Panel. Funktioniert auch alles super, jedoch möchte ich einerseits, dass der Benutzer nur diese sogenannten drei Lines benutzen kann und sollte eine weitere Eingabe erfolgen, rechnet er das Ergebnis aus und nimmt dieses als erste Eingabe (erste Line), aber löscht den Rest (sogesehen: zweite und dritte Line), damit der Benutzer weitereingeben kann.

Auch würde ich gerne wissen, wie man das machen kann, dass ins TMemo nur mit Hilfe von Buttons geschrieben wird, da ich zu dumm bin, die Tastatureingabe als Eingabe zu integrieren. Also er funktioniert schon, jedoch übergibt er nicht richtig den Rechenoperator. Screens folgen.

Hatte es mir irgendwie so gedacht, dass eine Abfrage der Linesanzahl getätigt wird, weiß nur nicht, wie das zu bewerkstelligen ist..

Vielen Dank vorab!

Jumpy 11. Sep 2018 12:18

AW: Inhaltsabfrage in Delphi 10.2
 
Am einfachsten speicherst du deine Eingaben in Variablen (wenn man so will der Speicher des Taschenrechners) und benutzt das Memo nur zur Anzeige. Du musst dir zudem merken, in welchem Zustand der Taschenrechner gerade ist, ob beim Eingebn der 1. Zahl oder der 2. Zahl, abhängig davon ob ein Operator eingegeben wurde usw. usw.
Das Eingeben per Tastatur kannst du erreichen, indem du für das Formular ein entsprechenden OnKeyPress-Event schreibst.

Hobbycoder 11. Sep 2018 12:48

AW: Inhaltsabfrage in Delphi 10.2
 
Delphi-Quellcode:
Memo.ReadOnly:=True
Dann kann man schon mal nicht mehr direkt ins Memo schreiben.

Und
Delphi-Quellcode:
Memo.Lines.Count
liefert dir die Anzahl der vorhanden Zeilen im Memo

iTzElKay 11. Sep 2018 13:07

AW: Inhaltsabfrage in Delphi 10.2
 
Danke euch beiden. Das mit dem OnKeyPress habe ich ausprobiert, ist aber auch bisschen kritisch. Der simpelste Weg ist das mit dem ReadOnly - das klappt gut. Gespeichert sind die Eingaben schon (meiner Meinung nach) in Variablen. Ich hatte mir gedacht, dass eine weitere Variable (csEingabe3) deklariert und mit der dritten Zeile initialisiert wird:
csEingabe3 := resultMemo.Lines[3];
if csEingabe3 = '' then...

..das klappt aber nicht so, da dann direkt die erste Eingabe nicht dem Datentyp entspricht.

Code:
  procedure TForm1.enterBtnClick(Sender: TObject);
  var neErgebnis : extended;
      neEingabe1 : extended;
      neEingabe2 : extended;

begin
   csRechenart := resultMemo.Lines[1];
   neEingabe1 := StrToFloat( resultMemo.Lines[0] );
   neEingabe2 := StrToFloat( resultMemo.Lines[2] );

if csRechenart = '/' then begin
   neErgebnis := ( neEingabe1 / neEingabe2 );
   resultPanel.Caption := 'Ihr Ergebnis: ' + FloatToStr( neErgebnis );
end;
if csRechenart = '*' then begin
   neErgebnis := ( neEingabe1 * neEingabe2 );
   resultPanel.Caption := 'Ihr Ergebnis: ' + FloatToStr( neErgebnis );
end;
if csRechenart = '+' then begin
   neErgebnis := ( neEingabe1 + neEingabe2 );
   resultPanel.Caption := 'Ihr Ergebnis: ' + FloatToStr( neErgebnis );
end;
if csRechenart = '-' then begin
   neErgebnis := ( neEingabe1 - neEingabe2 );
   resultPanel.Caption := 'Ihr Ergebnis: ' + FloatToStr( neErgebnis );
end;



end;

Hobbycoder 11. Sep 2018 14:06

AW: Inhaltsabfrage in Delphi 10.2
 
Generell ist dein Vorgehen nicht sehr ergonomisch und fehleranfällig.

Wenn es grundsätzlich um die Aufgabe geht aus zwei Werten eine Ergebnis zu berechnen, dann solltest du die Daten generell auch in entsprechenden Variablen halten, dort auch berechnen und lediglich für die Ausgabe an den User in das Memo schreiben. Bei der Ausgabe kannst du dann auch entsprechend formatieren.

Umgekehrt ist das, wie du merkst, deutlich umständlicher.

Die Erklärung dahinter ist einfach. Einen Fließkommawert in einen String zur Ausgabe umzuwandeln ist einfach, und dabei kann nahezu nichts schiefgehen. Der String kann alle Zeichen speichern, ob's nun Sinn macht oder nicht.
Aber um einen String in einen Fließkommawert zu wandeln, muss man schon deutlich mehr aufpassen. Denn eine Fließkommmazahl unterliegt nun mal ganz strikten Vorgaben (z.B. nur ein Kommazeichen und das richtige Kommazeichen. Keine Buchstaben, Leerzeichen, etc.).
Du merkst der Weg über einen String ist etwas schwieriger.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 Uhr.
Seite 1 von 3  1 23   

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