AGB  ·  Datenschutz  ·  Impressum  







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

inhalt von memo durch non-vcl auslesen

Ein Thema von heiopei · begonnen am 19. Feb 2006 · letzter Beitrag vom 19. Feb 2006
Antwort Antwort
heiopei
(Gast)

n/a Beiträge
 
#1

inhalt von memo durch non-vcl auslesen

  Alt 19. Feb 2006, 13:01
hallo,

ich möchte gern den inhalt eines memos, also einem mehrzeiligen edit-feld, auslesen.
allerdings ist mir die größe des inhaltes (anzahl der zeichen) nicht bekannt, ich kann also nicht direkt mit WM_GETTEXT arbeiten. also hab ich im sdk ein bisschen gesucht und EM_GETLINECOUNT, sowie EM_LINELENGTH gefunden - allerdings treten bei mir jetzt immer zugriffsverletzungen auf, ich weiss aber nicht wo (wahrscheinlich falscher indexzugriff auf die strings):

Delphi-Quellcode:
          
  ...
  EN_CHANGE:
    if loword(wParam) = IDC_MEMORG then
    begin
      x := 0;
      if SendMessage(hMemOrg, EM_GETLINECOUNT, 0 , 0) > 0 then
        for y := 0 to SendMessage(hMemOrg, EM_GETLINECOUNT, 0 , 0) - 1 do
          Inc(x, SendMessage(hMemOrg, EM_LINELENGTH, y, 0));
        SendMessage(hMemOrg, WM_GETTEXT, x, Integer(@buffer));
     if Length(buffer) > 0 then // = x ?
     begin
       //umformung nach tmp...
     end;
     buffer := '';
     SendMessage(hMemNew, WM_SETTEXT, 0 , Integer(@tmp));
   end;
danke schonmal,
heiopei
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: inhalt von memo durch non-vcl auslesen

  Alt 19. Feb 2006, 13:17
Moin Heiopei,

Zitat von heiopei:
allerdings ist mir die größe des inhaltes (anzahl der zeichen) nicht bekannt, ich kann also nicht direkt mit WM_GETTEXT arbeiten.
Das sollte sich mit WM_GETTEXTLENGTH machen lassen.

Ich gehe mal davon aus, dass buffer und tmp strings sind, dann musst Du sie mit @buffer[1]/@tmp[1] ansprechen, und natürlich muss der Buffer entsprechend initialisiert werden (z.b. SetLength).
Ausserdem musst Du je Zeile noch +2 hinzufügen, da die Zeilenvorschübe bei der Zeilenlänge, IMHO, nicht mitzählen.
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
heiopei
(Gast)

n/a Beiträge
 
#3

Re: inhalt von memo durch non-vcl auslesen

  Alt 19. Feb 2006, 13:33
danke erstmal

d.h. der code müsste jetzt in etwa so ausschauen:
- die ?-parameter muss ich dann nochmal nachschaun...

Delphi-Quellcode:
   ...
  EN_CHANGE:
    if loword(wParam) = IDC_MEMORG then
    begin
      x := SendMessage(hMemOrg, WMGETTEXTLENGTH, ?,?);
     SetLength(buffer, x);
     SendMessage(hMemOrg, WM_GETTEXT, x, Integer(@buffer[1]));
     if Length(buffer) > 0 then
     begin
       //umformung nach tmp...
     end;
     SendMessage(hMemNew, WM_SETTEXT, 0 , Integer(@tmp[1]));
     SetLength(tmp, 0);
     SetLength(buffer, 0);
   end;
stimmt das dann so?!?


ps: ja, buffer und tmp sind strings , x und y sind integers
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: inhalt von memo durch non-vcl auslesen

  Alt 19. Feb 2006, 14:05
Moin Heiopei,

es wäre gut x noch um 1 zu erhöhen, da WM_GETTEXTLENGTH die Länge ohne die abschliessende #0 zurückgibt, WM_GETTEXT aber die Anzahl der zu kopierenden Zeichen inclusive der #0 erfordert.
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
Antwort Antwort


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 15:03 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