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 1 von 3  1 23      
willnix

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

Was sind Structures

  Alt 15. Apr 2007, 15:23
Ich hoffe die Frage im Titel ist einigermaßen korrekt formuliert.
Was ich meine sind dinge wie dies:
Delphi-Quellcode:
typedef struct _gettextex {
    DWORD cb;
    DWORD flags;
    UINT codepage;
    LPCSTR lpDefaultChar;
    LPBOOL lpUsedDefChar;
}
 GETTEXTEX;
Dinge dieser Art sind mir jetzt schon mehrfach begegnet wenn ich aus einer anderen Anwendung etwas auslesen wollte.
Jetzt zum Beispiel würde ich gerne ein Rich Edit auslesen.
Die MSDN Libary meint dazu:
Zitat:
The EM_GETTEXTEX message allows you to get all of the text from the rich edit control in any particular code base you want.

Syntax
Ok.

Was ich nicht verstehe ist folgendes:
Zitat:
Pointer to a null-terminated string that receives the text. The size of this buffer should be placed in the cb member of the GETTEXTEX structure[u]
Also ich finde in der MSDN Lib. dann auch den Eintrag für die GETTEXTEX Structure, aber was genau ist das und wie verwende ich es in Delphi.
Also ich wäre sehr dankbar wenn mir jemand an diesem Beispiel erklären könnte was das ist wie ich es in Delphi einbauen kann (wo und wie ).
Also wie ich ein Handle finde und wie ich aus Edits Text auslese (und Text hinein schreibe)weiß ich nur eben wenn es um Rich Edits oder List Views geht bin ich wegen den zu verwenden Structures aufgeschmissen.
Vielen Dank im Voraus
Willnix
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Was sind Structures

  Alt 15. Apr 2007, 15:25
Das Delphi-Gegenstück heißt RECORD
Markus Kinzler
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#3

Re: Was sind Structures

  Alt 15. Apr 2007, 15:27
in C++ sind structure Klassen die nur daten und keine methoden beinhalten.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Was sind Structures

  Alt 15. Apr 2007, 15:30
Zitat von fwsp:
in C sind structure Klassen die nur daten und keine methoden beinhalten.
Das ist ein voellig unsinniger Satz, da C weder Methoden noch Klassen hat. Bei C++ stimmt er natuerlich.
struct und record sind ein und das selbe. Fuer union gibt es kein genaues Gegenstueck, aber ein variantes Record unterscheidet sich nur wenig.
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#5

Re: Was sind Structures

  Alt 15. Apr 2007, 15:39
Zitat von Robert Marquardt:
Bei C++ stimmt er natuerlich.
das hab ich doch geschrieben.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Was sind Structures

  Alt 15. Apr 2007, 15:41
Moin Willnix,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Zitat von willnix:
Was ich nicht verstehe ist folgendes:
Zitat:
Pointer to a null-terminated string that receives the text. The size of this buffer should be placed in the cb member of the GETTEXTEX structure[u]
In C werden Strings als Pointer auf einen Speicherbereich deklariert, der den String enthält, wobei das Ende des Strings durch ein Nullbyte kenntlich gemacht wird.

Bei der gezeigten Struktur (Record) musst Du also lpDefaultChar erst einmal mit einem entsprechenden Buffer versorgen (siehe GetMem/Allocmem). Den Platz den Du für den Buffer reserviert hast, musst Du auch in cb eintragen.
Wichtig:
EM_GETTEXTEX erwartet, dass cb auch den Platz für das abschliessende Nullbyte enthält. Wenn Du also einen Buffer von 100 Byte reservierst, und cb auf 100 setzt, so werden maximal 99 Zeichen ausgelesen.

Zitat von willnix:
nur eben wenn es um Rich Edits oder List Views geht bin ich wegen den zu verwenden Structures aufgeschmissen.
Wenn sich diese ListViews nicht in Deinem Programm befinden, wirst Du noch wegen etwas anderem aufgeschmissen sein
Bei Controls, die es erst seit dem 32-Bit Windows gibt, wie eben ListView, kann man die Daten nicht mehr so einfach auslesen, wie bei den Controls, die es schon im 16-Bit Windows gab. Aber auch hierfür wirst Du hier Beispiele finden, suche, z.B., einfach mal nach Hier im Forum suchenDIPS
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
 
#7

Re: Was sind Structures

  Alt 15. Apr 2007, 15:48
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

Um mal auf die ursprüngliche Frage zu antworten:
Delphi-Quellcode:
type
   _gettextex = record
      cb, flags: DWORD;
      codepage: UINT;
      lpDefaultChar: LPCSTR;
      lpUsedDefaultChar: LPBOOL;
   end;
   GETTEXTEX = _gettextex;

// [...]

var tex: ^GETTEXTEX;
    dwSize: DWORD;
    pc: PChar;
begin
   New(tex);
   dwSize := 4096;
   tex^.cb := dwSize;
   tex^.flags := GT_USECRLF;
   tex^.codepage := CP_ACP;
   tex^.lpDefaultChar := nil;
   tex^.lpUsedDefaultChar := nil;
   GetMem(pc, dwSize);
   SendMessage(controlHandle, EM_GETTEXTEX, tex, pc);
   DoSomethingWithResult(tex);
   FreeMem(pc, dwSize);
   Dispose(tex);
end;
Anhand der Doku geraten, nicht ausprobiert Und anstelle einer festen Größe sollte man natürlich vorher per anderer Message (EM_GETTEXTLEN oder was es da evtl. gibt) die notwendige Größe bestimmten.

Hmmmm... oh, jetzt kam noch jemand anders dazwischen... wird mein Post trotzdem nicht überflüssig, denn da ist was falsch: cb ist NICHT für die Größe von lpDefaultChar, sondern für die des PChars im lParam
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Was sind Structures

  Alt 15. Apr 2007, 15:55
Moin Dude,

Zitat von CCRDude:
wird mein Post trotzdem nicht überflüssig, denn da ist was falsch: cb ist NICHT für die Größe von lpDefaultChar, sondern für die des PChars im lParam
stimmt, hast Du auch wieder recht

Aber das Prinzip war richtig
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
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: Was sind Structures

  Alt 15. Apr 2007, 17:06
Ohne laestiges Alloziieren:
Delphi-Quellcode:
type
  LPGETTEXTEX = ^GETTEXTEX;
  GETTEXTEX = record
    cb: DWORD;
    flags: DWORD;
    codepage: UINT;
    lpDefaultChar: LPCSTR;
    lpUsedDefaultChar: LPBOOL;
 end;

// [...]

var
  tex: GETTEXTEX;
  pc: array [0..4095] of Char;
begin
  tex.cb := SizeOf(pc);
  tex.flags := GT_USECRLF;
  tex.codepage := CP_ACP;
  tex.lpDefaultChar := nil;
  tex.lpUsedDefaultChar := nil;
  SendMessage(controlHandle, EM_GETTEXTEX, WPARAM(@tex), LPARAM(@pc[0]));
  DoSomethingWithResult(pc);
end;
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#10

Re: Was sind Structures

  Alt 15. Apr 2007, 17:11
Fürs tex mag das angehen und sogar Fehler vermeiden, da hast Du recht... aber beim array muss ich widersprechen! Ein statisches Array wie von Dir beschrieben bedeutet, daß nicht mehr als 4K Text aus dem RichEdit ausgelesen werden! Gerade bei dem Overhead, den RTF bedeutet, sind die sehr schnell erreicht und man ist ganz schnell auf der Suche nach Fehlern, warum denn der Text plötzlich abgeschnitten ist...
Und ein riesiges Array, nur um jede mögliche Größe zu berücksichtigen, wäre eine riesige Speicherverquaserei
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 06:18 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