AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Inhaltsabfrage in Delphi 10.2

Ein Thema von iTzElKay · begonnen am 11. Sep 2018 · letzter Beitrag vom 13. Sep 2018
Antwort Antwort
Seite 1 von 3  1 23   
iTzElKay

Registriert seit: 11. Sep 2018
Ort: Vlotho, im wundervollen NRW.
25 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 11:04
Delphi-Version: 10.2 Tokyo
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!
Leon
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 11:06
Pos/PosEx(), StrScan(), ...

if Pos( ',', Memo.Lines.Text) < 1 then //Noch kein Komma
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 11:21
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.
Heiko
  Mit Zitat antworten Zitat
iTzElKay

Registriert seit: 11. Sep 2018
Ort: Vlotho, im wundervollen NRW.
25 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 12:18
Vielen Dank für deine Antwort. Problem hat sich somit gelöst!
Leon
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#5

AW: Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 12:31
Pos/PosEx(), StrScan(), ...

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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
iTzElKay

Registriert seit: 11. Sep 2018
Ort: Vlotho, im wundervollen NRW.
25 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 13:09
@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!
Miniaturansicht angehängter Grafiken
delphiportal.png  
Leon

Geändert von iTzElKay (11. Sep 2018 um 13:15 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 13:18
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.
Ralph
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
928 Beiträge
 
#8

AW: Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 13:48
Memo.ReadOnly:=True Dann kann man schon mal nicht mehr direkt ins Memo schreiben.

Und Memo.Lines.Count liefert dir die Anzahl der vorhanden Zeilen im Memo
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
iTzElKay

Registriert seit: 11. Sep 2018
Ort: Vlotho, im wundervollen NRW.
25 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 14:07
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;
Leon
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
928 Beiträge
 
#10

AW: Inhaltsabfrage in Delphi 10.2

  Alt 11. Sep 2018, 15:06
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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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