![]() |
String auslesen und auf zeichen reagieren und und und ...
HI Delphianer :hi:
Ich hab wie immer schon gesucht aber nix gefunden Also folgendes Es geht wieder um meine Konsole: Zum Verstänidniss die Konsole soll auf befehle die in ein Edit eingegeben werden reagieren Das werden denk ich ziemlich viele Befehle :!: :!: Bis jetzt hab ich es immer so gemacht das Die eingabe durch eine reihe von If Abfragen geluafen sind Also : Sind die ersten 4 Ziffern = Memo dann... Sind die ersten 7 ziffern = Konsole dann... Jetzt hab ich mir gedacht :gruebel: Das ist ziemlich unprofessional :wall: Deswegen will ich es jetzt so machen das der Befehl in einer Klammer steht und Jede Befehlsform mit einem . Zeichen abgetrennt wird Also so (Memo.font.color) = ($ff0000) So jetzt mein Problem: Ich weiß nicht wie ich es machen kann das Mein Programm nach dem Enter drücken die Klammern sucht und Den Gesamtstring schon mal in teilsttringe zerlegt Soll dann also so aussehen Eingabe = '(Memo.font.color) = ($ff0000)' Eingabe1 = 'Memo.font.color' Eingabe2 = '=' Eingabe3 = '$ff0000' So aber damit nicht genug :mrgreen: Jetzt soll das Programm die Eingabe auch noch als Befehl interpretieren aber nicht nur als If Abfrage :?: :?: Ich hoffe ihr wisst jetzt was gemeint ist oder :?: Ich will mir zumindest für die Objekte die If Abfrage ersparen das Programm soll also automatisch den String in einen befehl umwandeln Eingabe1 gibt den Linken Teil eingabe 2 den Operator und Eingabe 3 den zugewiesenen Wert :!: :!: Jetzt Will Ich aber nicht If Eingabe1 := 'memo.font.color' then... If eingabe1 := 'Memo.Height Tehn... If eingabe1 := 'Memo.weight' Then... . . . Ich hoffe es ist klar geworden was ich meine :?: :!: :?: Teilantworten sind auch OK danke im Vorraus :!: Axxus :!: |
Re: String auslesen und auf zeichen reagieren und und und ..
So ... ich gehe nun folgend davon aus, das du folgendes willst:
Du willst per Befehl in einem Edit-Feld die Eigenschaften eines Memos verändern. Imho hast du folgendes Problem (was du selbst, glaube ich, noch nicht weißt): Du kennst die Eigenschaften des Memos nicht (welche es gibt und welchen Typ sie haben). Natürlich könntest du sie hart codieren, aber da du ja auf der Suche nach dem professionellen Weg bist, wäre das falsch. Dieses Problem kannst du auf Basis von RTTI und der Unit "TypInfo" lösen. Was deine Frage angeht würde ich dir folgendes empfehlen: Wenn du nur Zuweisungen vornehemen willst, kannst du das "=" als Ausgangspunkt nehmen. Alles links davon ist der Variablenname, aus dem du noch eventuell störende Zeichen (nicht "Ziffern" ;) ) entfernen musst. Rechts vom Operator steht der neue Wert. Und das ist schon alles. :) |
Re: String auslesen und auf zeichen reagieren und und und ..
Vieleicht kam das nicht so deutlich rüber
Mein Programm soll um die Hundert Befehle haben von Layoutänderungen zum Pc runterfahren bis zun verändern von Attributen von Dateien... So JEtzt will ich aber nicht das Der String der Bei der Eingabe rauskommt durch Hundert IF Then abfragen läuft da das zum einen sehr unprofessionell ist zum anderen ist das ziemlich viel Schreibarbeit und zumm Dritten ist das net so gut für den Prozessor. Deswegen will ich es so machen (hab ich mir nämlich so vorgestellt 1 der Teil in der Ersten Klammer soll zu dem Linken teil eines Befehls werden und dann soll das so berechnet werden oder 2 Was ich mir gestern abend überlegt hab ich weiß nicht ob das möglich ist und wie ich das mache aber es wäre gut wenn ich Hundert Prozeduren schreibe und die Prozedur wird nur aufgerufen wenn der erste Teil des Strings so oder so lautet. Ivh hoffe das stimmt so denn ich glaube das wenn man es mit Prozeduren macht nicht bei jeder Eingabe KOntroliert wird ob der Wert eines Strings so und so ist sondern das Die Prozedur benachrichtigt wird wenn es so und so ist Heißt das die Prozedur geziehlt angesteiuert wird :?: :!: :?: 2 Wäre mir lieber und ist mir erst gstern eingefallen Ist so was möglich wenn ja wie und was ist professioneller 1 oder 2 :?: :?: :?: Axxus |
Re: String auslesen und auf zeichen reagieren und und und ..
HAb ich vergessen was ich auch noch brauch ist wie kann ich den Teil suchen der in Klammern steht und den in einen anderen striing schreiben
Axxus |
Re: String auslesen und auf zeichen reagieren und und und ..
Zitat:
Beispiel: set "Memo1.Color" "blue" Sowas würde sich ganz einfach mit einer StringList (Delimiter " ") parsen lassen. Um den Rechner herunterzufahren würde ein shutdown als Befehl reichen. Natürlich ist bei diesem Vorgehen der Befehlsatz auf die Befehle festgeschrieben, die du in deinem Programm definierst. Ein Umweg wären selbstregistrierende DLL's, die ein/mehrere Befehle im Hauptprogramm registrieren und sich um deren Ausführung kümmern. Das ist aber ein erheblicher Aufwand. Wir könnten dir viel besser helfen, wenn du uns sagst was du wirklich machen willst ({$region "OffTopic"}Ich vermute mal ein Programm um einen anderen Rechner fern zu steuern{$endregion}). Btw.: Zitat:
|
Re: String auslesen und auf zeichen reagieren und und und ..
Oki also folgendes:
Ich weiß noch nicht ob es was wid denn ich hab immer nur i intervallen lust auf proggen :wall: Aber ich hab mir vorgenommen ne Konsole zu machen die das komplette Windows steuern kann Beispil an Befelen: Layout verändern Herunterfahren Neustarten Standby Exe öffnen Läutstärke verstellen Datei öffnen Darteiattribute verändern . . . So das ganze will ich in ner KOnsole machen als vorbild hab ivch mir cmd genommen aber der aufbau ist anders ich hab oben ein memo und drunter ein Edit und einen Button so wie die KOnsole von cs falls ihr die Kennt So damit ich die Eingabe nicht durch 100 If Abfragen leiten muss suche ich eine schnellere und professionelere Lösung Ich hab noch kein Festes konzept deswegen suche ich ja Hilfe wie ich das machen kann jedenfalls muss ich mich für eines entscheiden und das dann Kosequent verfolgen da das umschreiben sehr lange dauern würde Zu dem Offtopic Ich weiß noch nicht ob ich ne Lan abteilung mit reinnehmen soll heißt auf nem anderen Pc nen Programm starten usw. Vorab es soll nichts mit Viren und Trojanern zutun haben soviel kann ich schon mal versprechen auch wenn isch das in anderen Topichs so anhört wenn ich nen Lanabschnit reinmache dann soll der eher so aussehen wie MAster Eye falls das einer kennt also mit dem Teil will ich Benutzern die Möglichkeit geben als Admin auf andere rechner zuzugraeifen wie halst in der Schule in der der Lehrer ja auch die rechner von seinen Schülern steuern kann. Nochmal 1. Ich weiß net ob ich das da reinmache :!: :!: :!: 2. Wenn ja dann nur mit autorisierungsabfrage ob der das darf :!: :!: :!: 3. Es hat nix mir Viren zutun :!: :!: :!: Um das klarzustellen ich hab nämlich schon die erfahrung gemacht das es sobalt es um andere rechner steuern geht die Leute misstrauisch werden und mir net mehr helfen wollen deswegen wollt ich das klarstellen :!: :!: :!: So also weiß jmn wie ich vorgehen soll Axxus |
Re: String auslesen und auf zeichen reagieren und und und ..
Moin Axxus,
da empfehle ich Dir, Dich mal mit ![]() Das Stichwort DEA (Determinierender Endlicher Automat) wird Dir auch etwas für Deine Problemlösung liefern. |
Re: String auslesen und auf zeichen reagieren und und und ..
Su Sorry aber ich bin erst 15 und das is mir noch en bisi kompliziert
HAt jemand anderes noch was Axxus |
Re: String auslesen und auf zeichen reagieren und und und ..
Hi Axxus,
schau Dir Doch mal DelphiWebScript o.ä. an. Das ist ein Pascal-Interpreter, den Du in dein Projekt einbauen kannst. Kannst Dir dann für alles mögliche eigene Kommandos in Delphi basteln und das Parsen und Ausführen überlässt Du der Engine. Da Performance beim verstellen von System-Parametern bzw. Aufrufen von System-Kommandos nicht unbedingt ein Problem ist, würde ich auf alle Fälle irgend eine Script-Lösung wählen. Gibt noch diverse andere Interpreter für delphi, oben genannter war nur ein Beispiel, das mir gerade einfiel. Oder z.B. PHP4Delphi, usw. |
Re: String auslesen und auf zeichen reagieren und und und ..
Also, ich habe (weil es mich einfach interessiert) mal versucht so etwas zu bauen !
Ich denke, das ist keine schöne Lösung, aber es funktioniert. Ich habe ein Form mit einem Edit (Edit1) und einem Memofeld (Memo1)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Memo1: TMemo; procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); private { Private declarations } BefehlListe : TStringList; Befehl : Integer; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Befehl := -1; //kein Befehl BefehlListe := TStringList.Create; //Dies gilt nur der Veranschaulichung, //später würde ich die Befehle aus einer textDatei Laden ( // mit BefehlListe.Loadfromfile('BefehlFile.dat'); BefehlListe.Add('MEMO.FONT.COLOR'); //0 BefehlListe.Add('MEMO.HEIGHT'); //1 BefehlListe.Add('MEMO.WEIGHT'); //2 Wobei ich denke, dass Du Width meinst // usw. ....... end; //OnKeyDown des Edit procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Index : Integer; begin if (Key = VK_Return) then begin if Edit1.text = '=' then //Das = war ja von Dir gewünscht, aber es tut nichts begin Edit1.Text := ''; exit; end; if Befehl <> -1 then begin case Befehl of 0 : begin //Memo.Font.Color try Memo1.Font.Color := TColor(Edit1.Text); except ShowMessage('ungültige Eingabe'); end; end; 1 : begin //Memo.Height try Memo1.Height := StrToInt(Edit1.Text); except ShowMessage('ungültige Eingabe'); end; end; 2 : begin //Memo.Weight try Memo1.Width := StrToInt(Edit1.Text); except ShowMessage('ungültige Eingabe'); end; end; // usw ................ end; end; Befehl := BefehlListe.IndexOf(UPPERCASE(Edit1.text)); Edit1.Text := ''; end; end; end. Kannst ja mal gucken ob es das ist was Du meinst ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 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