Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Funktion zur Textausgabe gesucht (https://www.delphipraxis.net/23581-funktion-zur-textausgabe-gesucht.html)

c113plpbr 5. Jun 2004 16:55


Funktion zur Textausgabe gesucht
 
Ich suche die funktion mir der z.B. der InternetExplorer den Text der InternetSeiten anzeigt. (ich hoffe doch, dass es sowas gibt)
Desweiteren suche ich die Funktion, mit der der Text in Edits, Memos, usw. ausgegeben wird, und die funktion mit der z.B. der Text von Menüs ausgegeben wird. (Falls das nicht alles die gleichen sind)

Ich habe herausgefunden, dass es diese Funktionen nicht sind:
TextOutA, TextOutW, DrawTextExA, DrawTextExW, PolyTextOutA, PolyTextOutW, TabbedTextOutA, TabbedTextOutW

Da fragt man sich bestimmt: Und wozu brauchst du das?
Ganz einfach: Ich will die Funktionen 'abfangen' (per API-Hook) und 'loggen' wo was ausgegeben wurde, damit ich z.B. das wort unter dem Mauszeiger herausfinden kann. (Labels zeigen ihren Text mit TextOut an, da funktioniert das auch schon ganz prächtig ... ^^)

Jelly 5. Jun 2004 18:23

Re: Funktion zur Textausgabe gesucht
 
Zitat:

Zitat von c113plpbr
Desweiteren suche ich die Funktion, mit der der Text in Edits, Memos, usw. ausgegeben wird, und die funktion mit der z.B. der Text von Menüs ausgegeben wird.

Also ich versteh nicht ganz was du da für ne spezielle Funktion suchst... Ein Edit-Feld füllst du einfach mit
Code:
edit1.text := 'BliBla' ;
Ich schein aber irgendwie dein Problem nicht ganz erkannt zu haben, oder :stupid:

Gruß,
Tom

c113plpbr 5. Jun 2004 20:55

Re: Funktion zur Textausgabe gesucht
 
Zitat:

Zitat von Jelly
Ich schein aber irgendwie dein Problem nicht ganz erkannt zu haben, oder :stupid:

Nicht wirklich ...
Wenn du so: edit1.text := 'xyz'; etwas in eine edit 'schreibst' wird der Text dadurch noch nicht angezeigt (im endeffekt schon, aus den daraus resultierenden Ereignissen ^^). Im Hintergrund laufen andere dinge ab: Durch das ereignis (änderung des Textes) wird irgendeine Funktion (die ich eben suche), die (sehr sicher) aus der API kommt, aufgerufen, welche dann den Text (der bisher nur virtuell war) auf den Bildschirm bringt. Z.B. bei Labels wird die Funktion TextOut verwendet, um den Text anzuzeigen, aber bei Edits aber nicht, und ich hab keine Ahnung welche funktion das sein könnte ... daher frag ich ja ^^

StefanDP 5. Jun 2004 21:01

Re: Funktion zur Textausgabe gesucht
 
wenn ich das richtig verstehe möchtest du z.b. von
Code:
<html>
<body>
bla
hallo, wie gehts?</body>/html>
"bla hallo, wie gehts?" bekommen?

edit:
ich hab mal ne funktion gefunden und für eins meiner projekte erweitert:
Delphi-Quellcode:
function TAuswerten.PlainText(strHTML: string): string;
var
  P: PChar;
  InTag: Boolean;
begin
  // <head> löschen
  while (Pos('<head',strHTML) > 0) and
        (Pos('</head>',strHTML) > Pos('<head',strHTML)) do
    Delete(strHTML, Pos('<head',strHTML), (Pos('</head>',strHTML) + 7) - Pos('<head',strHTML));
  // <script> löschen
  while (Pos('<script',strHTML) > 0) and
        (Pos('</script>',strHTML) > Pos('<script',strHTML)) do
    Delete(strHTML, Pos('<script',strHTML), (Pos('</script>',strHTML) + 9) - Pos('<script',strHTML));
  // <style> löschen
  while (Pos('<style',strHTML) > 0) and
        (Pos('</style>',strHTML) > Pos('<style',strHTML)) do
    Delete(strHTML, Pos('<style',strHTML), (Pos('</style>',strHTML) + 8) - Pos('<style',strHTML));

//  strHTML := StringReplace(strHTML,'
',' ',[rfReplaceAll]);
  // Alle tags werden durch leerzeichen ersetzt
  strHTML := StringReplace(strHTML,'>','> ',[rfReplaceAll]);
  P := PChar(strHTML);
  Result := '';

  InTag := False;
  repeat
    case P^ of
      '<': InTag := True;
      '>': InTag := False;
      #13, #10: ; // nichts machen
      else
        if not InTag then
        begin
          if (P^ in [#9, #32]) and ((P+1)^ in [#10, #13, #32, #9, '<']) then
          else
            Result := Result + P^;
        end;
    end;
    Inc(P);
  until (P^ = #0);

  // HTML spezial umwandeln
  Result := StringReplace(Result, '&auml;', 'ä', [rfReplaceAll]);
  Result := StringReplace(Result, '&ouml;', 'ö', [rfReplaceAll]);
  Result := StringReplace(Result, '&uuml;', 'ü', [rfReplaceAll]);
  Result := StringReplace(Result, '&szlig;', 'ß', [rfReplaceAll]);
  Result := StringReplace(Result, '', ' ', [rfReplaceAll]);
  Result := StringReplace(Result, '*', ' ', [rfReplaceAll]);
  Result := StringReplace(Result, '&gt;', '>', [rfReplaceAll]);
  Result := StringReplace(Result, '&lt;', '<', [rfReplaceAll]);

{  Result := StringReplace(Result, '&quot;', '"', [rfReplaceAll]);
  Result := StringReplace(Result, '&apos;', '''', [rfReplaceAll]);
  Result := StringReplace(Result, '&amp;', '&', [rfReplaceAll]);
}
end;

c113plpbr 5. Jun 2004 23:15

Re: Funktion zur Textausgabe gesucht
 
Zitat:

Zitat von StefanDP
wenn ich das richtig verstehe möchtest du z.b. von
Code:
<html>
<body>
bla
hallo, wie gehts?</body>/html>
"bla hallo, wie gehts?" bekommen?

Nein. Warum versteht ihr mich alle falsch ...

Aaaallsso ... wie ihr bestimmt wisst, kann man mit z.B. der Funktion TextOut Text auf seine Form bringen. Nun stellt euch vor, ihr seid ein Label, und ihr sollt nun den euch zugewiesenen Text anzeigen. Wie tut ihr das? Ganz einfach: Mit TextOut(DC, X, Y, 'hallo!', 5);
(mit dem einzigen unterschied, dass labels DrawText verwenden, was aber aufs gleiche rauskommt)
So, und nun stellt euch vor, ihr seid ne Edit, und ihr sollt den euch zugewiesenen Text anzeigen. Wie tut ihr das? Und genau das will ich wissen ... ich will nicht wissen wie ihr es tun würdet, sondern wie die Edit es tut.

Alles unklar? Gut ...

Stanlay Hanks 5. Jun 2004 23:19

Re: Funktion zur Textausgabe gesucht
 
Edits zeichnen ihren Text auch :gruebel: Ich kann mich allerdings nicht ganz in ein Edit hineinversetzen, scheint mir :(

SirThornberry 5. Jun 2004 23:29

Re: Funktion zur Textausgabe gesucht
 
Irgendwie hab ich das Gefühl das manche hier die Beiträge nicht lesen. Wenn man genau liest wird man feststellen das c113plpbr einfach nur die Funktion sucht mit welcher intern bei edits etc der text ausgegeben wird..

@c113plpbr: Die Methode zu hooken halte ich für keinen sinnvollen Ansatz. Den Shoutboxreader den ich geschrieben hab, der schreibt den satz beispielsweise nicht im ganzen sondern zerteilt den in viele kleine stücken so das du ihn mit deinem apihook nie erhalten würdest. Ich denke so wie babylon das ganze macht ist der ansatz besser - es verwendet eine art ocx um zu erkennen welcher text auf dem canvas des dargestellt wird... Wenn du dennoch nicht davon abweichen willst das ganze mit apihook zu lösen so empfehle ich dir erstmal bei den programmen zu schauen welche dll's sie verwenden. Anschließend kannst du dann diese nach Funktionen durchsuchen bzw. dir alle funktionen derer auflisten lassen

MrKnogge 6. Jun 2004 09:41

Re: Funktion zur Textausgabe gesucht
 
@c113plpbr

Du hast doch D8 Architekt :wink:

Dann schau doch einfach in dein Delphi7-Verzeichniss unter sources dir den Code vom TEdit an :roll:

c113plpbr 6. Jun 2004 16:45

Re: Funktion zur Textausgabe gesucht
 
Zitat:

Zitat von SirThornberry
Den Shoutboxreader den ich geschrieben hab, der schreibt den satz beispielsweise nicht im ganzen sondern zerteilt den in viele kleine stücken so das du ihn mit deinem apihook nie erhalten würdest.

Ich suche ja eigentlich nur nach einzelen worten, nicht nach ganzen sätzen ... ^^
Zitat:

Zitat von SirThornberry
Wenn du dennoch nicht davon abweichen willst das ganze mit apihook zu lösen so empfehle ich dir erstmal bei den programmen zu schauen welche dll's sie verwenden. Anschließend kannst du dann diese nach Funktionen durchsuchen bzw. dir alle funktionen derer auflisten lassen

Na dann versuch mal z.B. die User32.dll nach solchen funktionen zu durchsuchen ... ich habs versucht ... bin aber gescheitert ^^, was aber daran liegen konnte, dass die Programme selbst, mit dem anzeigen nichts zu tun haben. Ich hab auch schon im quellcode von TCustomEdit gesucht, aber ich bin zu dem ergebnis gekommen, dass alles, wirklich alles über windowmessages abläuft, und dass schätzungsweise das system das anzeigen komplett übernimmt. Trotzdem muss es doch eine Funktion geben, die beim anzeigen dieses Textes aufgerufen wird, oder?

Ratte 6. Jun 2004 17:02

Re: Funktion zur Textausgabe gesucht
 
Soweit ich weiß ist das im OS definiert und folglich kaum ansprechbar.

Ratte


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