AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Was sind Structures

Ein Thema von willnix · begonnen am 15. Apr 2007 · letzter Beitrag vom 17. Apr 2007
Antwort Antwort
Seite 3 von 3     123   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: Was sind Structures

  Alt 15. Apr 2007, 21:48
Moin Willnix,

diese Konstanten sind, zumindest in D7, nicht deklariert.
Wie CCRDude schon so richtig vermutete sind sie in der richedit.h deklariert:

Delphi-Quellcode:
const
  EM_GETTEXTRANGE = WM_USER+75;
  EM_GETTEXTEX = WM_USER+94;
Nicht alles, was im PSDK deklariert ist, wurde auch in Delphi umgesetzt.

Das PSDK (mit den Header-Dateien) kannst Du hier herunterladen (bis incl. 2003 R2 Server)
http://www.microsoft.com/downloads/d...displaylang=en

oder noch aktueller, dafür deutlich grösser (bis incl. Vista)
http://www.microsoft.com/downloads/d...DisplayLang=en
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#22

Re: Was sind Structures

  Alt 15. Apr 2007, 22:43
Zitat von Christian Seehase:
diese Konstanten sind, zumindest in D7, nicht deklariert.
Kann ich so nicht stehen lassen - alles hier diskutierte steht in der Unit "RichEdit" (die Struktur TGetTextEx, die Konstanten).

Für neuer Sachen aus "richedit.h", die in "RichEdit.pas" noch nicht deklariert sind (z.B. EM_SETTEXTEX), kannst du mein "RichEdit2.pas" benutzen (der Link "Zurück zur Übersicht" bringt dich zur Download-Möglichkeit).
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#23

Re: Was sind Structures

  Alt 16. Apr 2007, 01:06
Zitat von CCRDude:
Auch bei C++ würde ich nicht ganz zustimmen, denn eine Klasse ist ja etwas, das erst initialisiert werden muss, während ein struct/record davon unabhängig ist (es sei denn natürlich, man nähme einen Zeiger darauf...).
Und da dann records in Delphi durchaus doch "Methoden" (bzw. Funktionen und Prozeduren) beinhalten dürfen, ist das Chaos komplett
Das stimmt so nicht ganz. In C++ gibt es keinen Unterschied zwischen struct und class. Ok, einen winzigen Unterschied gibt es doch: In einer Struktur sind alle Felder standardmäßig public, in einer Klasse sind alle Felder standardmäßig private. Ansonsten sind beide gleich und können auch austauschbar verwendet werden.
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#24

Re: Was sind Structures

  Alt 16. Apr 2007, 07:49
Ah, ein Alter Ego von ezekiel?

Siehe Kontext: Das (Wort) "Klasse" von fwsp/Robert Marquardt, das ich wiederholte, schien dort nur für Pascal gemeint gewesen sein, deswegen (wie ich ja schon per PM erläuterte) verwendete ich es ungeschickterweise auch ohne weiterer Spezifikation im gleichen Sinne von Pascal-Klasse (die C++-class war ja zudem wie von Dir erläutert schon im struct abgedeckt im Satz ). War vielleicht etwas unklar ausgedrückt, sorry
  Mit Zitat antworten Zitat
willnix

Registriert seit: 14. Apr 2007
Ort: Heidelberg
27 Beiträge
 
Delphi 7 Professional
 
#25

Re: Was sind Structures

  Alt 16. Apr 2007, 18:33
Ahh, vielen Dank Christian, ich werde mir das ganze dann gleich mal herunterladen.
Das ergibt so eindeutig Sinn.
Ich hatte es natürlich auch mit der RichEdit.pas versucht aber dort war zwar vieles deklariert unter anderem auch GT_USECRLF,
aber eben nicht EM_GETTEXTEX.
Die richedit.h hatte ich eben gar nicht also werde ich mir die jetzt mal runterladen (bzw. gleich das ganze SDK).
Vielen Dank nochmal an alle die mir geholfen haben
Willnix

P.S Ich hoffe jetzt gehts sonst muss ich hier doch noch weiter fragen.

EDIT (grad erst Flockes Post gelesen):
Zitat von Flocke:
Kann ich so nicht stehen lassen - alles hier diskutierte steht in der Unit "RichEdit" (die Struktur TGetTextEx, die Konstanten).
Sorry aber das kan ICH nicht so stehen lasen .
In MEINER RichEdit.pas ist zumindest EM_GETEXTEX NICHT deklariert, aber wie gesagt vieleicht liegts an meiner seltsamen Delphi Version.
Nichts für ungut
Willnix
  Mit Zitat antworten Zitat
willnix

Registriert seit: 14. Apr 2007
Ort: Heidelberg
27 Beiträge
 
Delphi 7 Professional
 
#26

Re: Was sind Structures

  Alt 16. Apr 2007, 19:27
Ich verzweifel noch daran.
Jetzt sind die Dinger Declariert, aber dafür bekomme ich immer einen leeren String zurück.
Ich habe schon versucht das Wordpad Rich Edit auszulesen, ICQ Fenster auszulesen, ein Rich Edit im eigenen Programm auszulesen, alles ohne Erfolg.
Immer ist die VAriable mit dem empfangen Text leer.
Willnix

Achja hier ist der Code den ich für Wordpad beutzt habe:

Delphi-Quellcode:
unit icq;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellAPI, ComCtrls, RichEdit;

type
  LPGETTEXTEX = ^GETTEXTEX;
  GETTEXTEX = record
    cb: DWORD;
    flags: DWORD;
    codepage: UINT;
    lpDefaultChar: LPCSTR;
    lpUsedDefaultChar: PBOOL;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    RichEdit1: TRichEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  tex: GETTEXTEX;
  pc: PChar;
  wnd: HWND;

implementation

{$R *.dfm}

function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND;
var
  i: Word;
  hChild: HWND;
begin
  hChild := 0;
  Result := 0;
  ChildNr := ChildNr - 1;
  for i := 0 to ChildNr do
  begin
    hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil);
    if hChild = 0 then
      Exit;
    Result := hChild;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  wnd: HWND;
begin
  tex.cb := SizeOf(pc);
  tex.flags := GT_USECRLF;
  tex.codepage := CP_ACP;
  tex.lpDefaultChar := nil;
  tex.lpUsedDefaultChar := nil;
  wnd := FindWindow('WordPadClass','Dokument - WordPad');
  wnd := FindWindowEx(wnd, 0, 'RICHEDIT50W', nil);
  SendMessage(wnd, EM_GETTEXTEX, WPARAM(@tex), LPARAM(@pc[0]));
  if pc = 'then begin
  ShowMessage('NIX AUSGELESEN!');
  end
  else begin
  RichEdit1.Text := pc;
  end;
end;
end.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#27

Re: Was sind Structures

  Alt 16. Apr 2007, 21:30
Zitat von willnix:
Sorry aber das kan ICH nicht so stehen lasen .
In MEINER RichEdit.pas ist zumindest EM_GETEXTEX NICHT deklariert, aber wie gesagt vieleicht liegts an meiner seltsamen Delphi Version.
Nichts für ungut
Willnix
Hier zwei Passagen aus RichEdit.pas zu Delphi 7, war aber auch in Delphi 5 schon drin.
Zeile 154/155:
Delphi-Quellcode:
  {$EXTERNALSYM EM_GETTEXTEX}
  EM_GETTEXTEX = WM_USER + 94;
Zeile 1151 ff.
Delphi-Quellcode:
{ flags for the GETEXTEX data structure }

const
  {$EXTERNALSYM GT_DEFAULT}
  GT_DEFAULT = 0;
  {$EXTERNALSYM GT_USECRLF}
  GT_USECRLF = 1;

{ EM_GETTEXTEX info; this struct is passed in the wparam of the message }

type
  GETTEXTEX = record
    cb: DWORD; { count of bytes in the string  }
    flags: DWORD; { flags (see the GT_XXX defines }
    codepage: UINT; { code page for translation (CP_ACP for default,
                                 1200 for Unicode                 }

    lpDefaultChar: LPCSTR; { replacement for unmappable chars          }
    lpUsedDefChar: PBOOL; { pointer to flag set when def char used    }
  end;
  {$EXTERNALSYM GETTEXTEX}
  TGetTextEx = GETTEXTEX;
Zitat von willnix:
Ich habe schon versucht das Wordpad Rich Edit auszulesen, ICQ Fenster auszulesen, ein Rich Edit im eigenen Programm auszulesen, alles ohne Erfolg.
Immer ist die VAriable mit dem empfangen Text leer.
Schon mal daran gedacht, dass deine Zeiger (LPARAM) im Kontext eines anderen Prozesses ins Nirwana zeigen?
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#28

Re: Was sind Structures

  Alt 16. Apr 2007, 21:40
Moin Willnix,

was die Initialisierung von cb angeht solltest Du Dir noch einmal diesen Beitrag von CCRDude durchlesen.
Bei Dir wird dort 4 eingetragen, was nun wirklich nicht aussreicht

pc ist ein PChar, also ein Pointer, und die Grösse eines Pointer ist 4.

Ausserdem kannst Du das
LPARAM(@pc[0]) auch so darstellen
LPARAM(pc) Was mir dann noch aufgefallen ist:
Bevor Du die Rückgabewerte von Funktionen benutzt, solltest Du erst einmal prüfen, ob der Aufruf erfolgreich war.
Dies betrifft die FindWindow(Ex) Aufrufe.

Zudem solltest Du zuerst EM_GETTEXTLENTHEX benutzen, um zu wissen, wie gross Du den Buffer machen musst, damit Du auch alles auslesen kannst.


Wenn das alles nichts hilft, könnte es sein, dass das Control diesen Weg des Auslesens nicht mehr zulässt (siehe meinen Beitrag zum ListView weiter oben).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#29

Re: Was sind Structures

  Alt 17. Apr 2007, 09:13
Um das "in D7 drin oder nicht" noch kurz evtl. aufklären: willnix hatte den Fehler " Undeclared Identifier:'EM_GETTEXTTEX'" ... Tippfehler, ein T zuviel

Fürs Auslesen ist mir gerade noch ein Tool eingefallen, das bei älteren Delphi-Versionen dabei war (bei neueren imho nicht mehr), irgendwas mit Dingsdabums-Spy oder so... das zeigte einen Baum sämtlicher GUI-Elemente auf dem Desktop an und konnte imho auch Texte abfragen (war ne gute Demo dafür, wie unsicher TEdit mit Passwordchar war... jedes andere Programm konnte den Text einfachst auslesen). Vielleicht findest Du damit mehr Infos bzw. kannst die Unterschiede zwischen verschiedenen RichEdits vergleichen.
  Mit Zitat antworten Zitat
willnix

Registriert seit: 14. Apr 2007
Ort: Heidelberg
27 Beiträge
 
Delphi 7 Professional
 
#30

Re: Was sind Structures

  Alt 17. Apr 2007, 15:33
Zitat von Christian Seehase:
Moin Willnix,

was die Initialisierung von cb angeht solltest Du Dir noch einmal diesen Beitrag von CCRDude durchlesen.
Bei Dir wird dort 4 eingetragen, was nun wirklich nicht aussreicht
Ups, da habe ich was falsches gepostet, ich hatte den Code zwischendurch mit allen möglichen Buffergrößen zwischen 10.000 und 4 getestet.
Zitat von Christian Seehase:
Ausserdem kannst Du das
LPARAM(@pc[0]) auch so darstellen
LPARAM(pc)
OK das mach ich mal, ist einfacher.
Zitat von Christian Seehase:
Bevor Du die Rückgabewerte von Funktionen benutzt, solltest Du erst einmal prüfen, ob der Aufruf erfolgreich war.
Dies betrifft die FindWindow(Ex) Aufrufe.
Is klar sollte man machen, ich hatte allerdings zwischendrin eine Message Box eingebaut dir mir das gefunden Handle anzeigt, und das war richtig. (Also das gleiche wie in WinSpy und mit WinSpy kann ich den Text auslesen).
Zitat von Christian Seehase:
Wenn das alles nichts hilft, könnte es sein, dass das Control diesen Weg des Auslesens nicht mehr zulässt (siehe meinen Beitrag zum ListView weiter oben).
Verwendet Win Spy einen anderen ? *zum Autor schiel*
Allerdings habe ich das ganze mit ICQ, meinem eigenen Programm und Wordpad getestet (@CCRDude natürlich habe ich vorher den FindWindowEx Aufruf usw. angepasst).
Also denke ich, dass dieser Fall unwahrscheinlich ist.
Vorausgesetzt sowas ist nicht Systemweit eingeschränkt.
Aber danke schon mal
Willnix
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 00:53 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