Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozedur für jeden Buchstaben (https://www.delphipraxis.net/85820-prozedur-fuer-jeden-buchstaben.html)

burn 5. Feb 2007 11:49


Prozedur für jeden Buchstaben
 
Hallo allerseits,

ich muss für jeden Buchstaben/Zahl auf der Tastatur eine Prozedur ausführen.
Das ganze soll dann in etwa folgendermassen aussehen.

Ich habe einen Text z.B. "Dies ist ein Text"
Nun durchlaufe ich den String und lass für jedes Zeichen eine Prozedur ausführen.

Delphi-Quellcode:
procedure _49;
begin
  bla
end;

procedure _50;
begin
  bla
end;

for i:= 1 to length(Text) do
begin
  c := ord(Text[i]);
  case c of
    49 : _49;
    50 : _50;
  end;
end;
Soweit so gut ... Nun würde ich gerne die Case-Anweisung weglassen und frage mich
ob so was überhaupt geht ...

In etwa würde ich das gerne so haben ...

Delphi-Quellcode:
for i:= 1 to length(Text) do
begin
  c := ord(Text[i]);
  RufeProzedurAuf('_' + IntToStr(c)); //Das geht leider nicht :-)
end;
Hat irgendwer ne Idee ??

Grüsse Steve

SirThornberry 5. Feb 2007 11:56

Re: Prozedur für jeden Buchstaben
 
die Methode "MethodAddress" sollte dir da helfen. Damit bekommst du die Adresse und kannst diese dann auf deinen Methodentyp casten so das du für alle Zeischen das ganze hinn bekommst.

Muetze1 5. Feb 2007 12:21

Re: Prozedur für jeden Buchstaben
 
Er hat keine Methoden - das müsste er noch umstellen.

Ansonsten würde ich ein konstantes Array anlegen mit dem Zeichen und der entsprechenden Procedure.

hoika 5. Feb 2007 12:23

Re: Prozedur für jeden Buchstaben
 
Hallo,

muss wirklich zu jedem Buchstaben eine gesonderte Procedure
aufgerufen werden oder nur für ein paar Buchstaben wirklich was gaaanz anderes.

Das Case kann man auch so verwenden

Delphi-Quellcode:
case i of
  1,3,7   : bla1;
  2,4,5,6 : bla2;
end;
Ansonsten ist es wirklich am einfachsten mit einem Array
der Methodenadressen.


Heiko

passsy 5. Feb 2007 12:59

Re: Prozedur für jeden Buchstaben
 
was müssen den die Proceduren machen? vll kann man das auch vereinfachen. sonst musst du 26x2+(öäü)x2+(die ganzen sonderzeichen)x2 prozeduren machen. wenns dir spaß macht ;)

burn 5. Feb 2007 16:37

Re: Prozedur für jeden Buchstaben
 
So .. da bin ich wieder

@ SirThornberry
Leider funktioniert das nicht weil ich, wie Muetze1 schreibt, keine Methoden habe ..

@ Muetze1
Du schreibst " ... das müsste man noch umstellen"
Was und Wie müsste ich das noch umstellen...
Ein konstantes Array bringt mich da auch nicht weiter, weil ich nicht so viel Quelltext haben wollte.
Sonst könnt ich ja auch die Case-Anweisung lassen. (kommt vom Platz fast aufs selbe raus)

@ hoika
Diese Case-Anweisung bringt nichts ...
Ich muss definitiv für jedes Zeichen (!) eine procedure haben.

@ passy
Ich will grob gesagt meine eigene Schrift zeichnen lassen. Und da muss ja nun
mal jedes Zeichen anders aussehen. (eine 1 wie eine 1 und ein a wie ein a und ein A wie ein A usw...)

für weitere Tipps wäre ich dankbar...

Grüsse Steve

Muetze1 5. Feb 2007 19:15

Re: Prozedur für jeden Buchstaben
 
Zitat:

Zitat von burn
Du schreibst " ... das müsste man noch umstellen"
Was und Wie müsste ich das noch umstellen...

Na auf Methoden... - dann funktioniert SirThomberry's Tipp.

Zitat:

Zitat von burn
Ein konstantes Array bringt mich da auch nicht weiter, weil ich nicht so viel Quelltext haben wollte.
Sonst könnt ich ja auch die Case-Anweisung lassen. (kommt vom Platz fast aufs selbe raus)

Auf den Quelltext kommst du nunmal - so oder so. Und Array als Sprungtabelle nutzen wäre auch fast noch kleiner als deine Case Anweisung - und selbst wenn - lager sie doch in eine andere Unit aus...

Hawkeye219 5. Feb 2007 19:59

Re: Prozedur für jeden Buchstaben
 
Hi Steve,

hier ist eine kleine technische Spielerei:

Delphi-Quellcode:
procedure A;
begin
  ShowMessage ('A');
end;

procedure B;
begin
  ShowMessage ('B');
end;

procedure C;
begin
  ShowMessage ('C');
end;

exports
  A, B, C;

procedure TForm1.Button1Click(Sender: TObject);
var
  proc : procedure;
begin
  proc := GetProcAddress(HInstance, PChar(Edit1.Text));
  if Assigned(proc) then
    proc
  else
    ShowMessage ('Prozedur "' + Edit1.Text + '" existiert nicht!');
end;
Hast du dir eigentlich schon überlegt, wie du Sonderzeichen ('$', '(',...) behandeln möchtest?

Gruß Hawkeye

burn 6. Feb 2007 08:25

Re: Prozedur für jeden Buchstaben
 
Hallo Hawkeye,

genau so funktioniert das ganze ... Die Sonderzeichen stellen kein Problem dar.

Delphi-Quellcode:
procedure _41;
begin
  showMessage(')');
end;

exports
  _41;

procedure TForm1.Button1Click(Sender: TObject);
var
  proc : procedure;
  c : Integer;
begin
  c := ord(')');
  proc := GetProcAddress(HInstance, PChar('_' + IntToStr(c)));
  if Assigned(proc) then
    proc
  else
    ShowMessage ('Prozedur für ")" existiert nicht!');
end;
Damit ist das Problem gelöst ...
Besten Dank nochmal an alle...

Grüsse Steve

smudo 6. Feb 2007 08:43

Re: Prozedur für jeden Buchstaben
 
Ich halte es für wenig sinnvoll, für jedes Zeichen eine separate Prozedur zu schreiben.
Es wird doch sicher einige Schritte geben, welche in allen Prozeduren gleich wäre. Deshalb wäre es auch besser, das gesamte Verfahren mit einer Prozedur zu lösen. Du musst doch sowieso für jedes Zeichen den Quellcode einer gesamten Prozedur aufbauen. Ich denke, die Lösung mit nur einer Prozedur wäre sparsamer (zum tippen), hätte weniger Redundanz und wäre übersichtlicher.

René


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Seite 1 von 2  1 2      

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