Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Zwei RTFs in einem RichEdit-Control - Ungültige Zeigerop.

  Alt 21. Nov 2009, 12:28
Hallo,

ich habe damals einen Code gehabt, der mit Hilfe der Windows API mehrere RTF-Texte in einem RichView (o.Ä) darstellen kann. Diesen Code verwende ich jetzt in meinem neuen Programm auch wieder, allerdings kommt immer die Fehlermeldung "Ungültige Zeigeroperation". Ich kann mir den Grund des Fehlers aber nicht herleiten. Gut, was Zeigeroperationen sind, weiß ich - aber da dürfte kein Fehler kommen. Hier mal mein QuellText:

Delphi-Quellcode:
function _AddRtfCallback(dwCookie: Longint; pbBuff: PByte;
  cb: Longint; var pcb: Longint): Longint; stdcall;
begin
  try
    Result := 0;
    pcb := TStream(dwCookie).Read(pbBuff^, cb);
  except
    Result := 1;
  end;
end;

procedure AddRtfFromStream(RichEditHandle: THandle; Stream: TStream);
var EditStream: TEditStream;
begin
  EditStream.dwCookie := LongInt(Stream);
  EditStream.dwError := 0;
  EditStream.pfnCallback := @_AddRtfCallback;

  SendMessage(RichEditHandle, EM_STREAMIN, SF_RTF + SFF_SELECTION, LongInt(@EditStream));
  if EditStream.dwError <> 0 then
    raise Exception.Create('RichEdit operation fehlgeschlagen!');
end;

procedure TForm1.LoadRTF;
var
  ss: TStringStream;
begin
  ss:=TStringStream.Create('');
  try
    ss.WriteString(utf8decode(Form1.ZQuery1.FieldByName('definition').AsString));
    ss.Position:=0;
    AddRTFFromStream(ncTBMS.Handle, ss);
  finally
    ss.Free;
  end;
end;
Wo konnte der Fehler liegen? Der Wert von "EditStream.dwError" ist -16. Das war er zumindest gestern.

Vielen Dank im Voraus
  Mit Zitat antworten Zitat