Mit folgender Procedure erzeuge ich Textboxen:
Code
procedure TCSKWPTDokument.TextBoxAtPos(X, Y, b, h: integer; seite: integer;
text: string);
var
txtobj: TWPTextObj;
RTFDataBlock: TWPRTFDataBlock;
PageXTW, PageYTW: integer;
par, parseite: TParagraph;
begin
// wir brauchen aber den ersten Par der Seite
// seite wird als erste Seite 1 übergeben, intern zählt aber ab 0!
parseite := nil;
par := fWPRichText.bodytext.FirstPar;
while par <> nil do
begin
if par.PageNr = seite - 1 then
begin
parseite := par;
break;
end;
par := par.Next;
end;
// nichts für die Seite gefunden?
if parseite = nil then
exit;
// Insert the box
fWPRichText.TextCursor.MoveTo(par, 0, false);
txtobj := fWPRichText.TextObjects.InsertTextBox(b, h, RTFDataBlock);
// Set contents
RTFDataBlock.RtfText.AsString := text; // HTML would be possible or RTF !
// Now update the txtobj
txtobj.Source := text;
txtobj.PositionMode := wpotPage;
txtobj.Wrap := wpwrNone; // Important for page objects
// Rahmen abschalten
txtobj.Frame := [];
txtobj.RelX := X; // X in twips !
txtobj.RelY := Y; // Y in twips !
txtobj.Mode := txtobj.Mode + [wpobjDisableAutoSize, wpobjWithinEditable];
fWPRichText.DelayedReformat;
end;
Alles anzeigen
in den Editmode der Box komme ich per
Code
procedure TCSKWPTDokument.WPRichTextTextObjectClick(Sender: TWPCustomRtfEdit;
pobj: TWPTextObj; obj: TWPObject; var Ignore: boolean);
begin
if obj <> nil then
obj.Edit;
end;
Nun aber habe ich das Problem, wenn ich mit der Maus darin Textteile markieren möchte (um sie z.B. fett zu machen) ist die Maus so etwa um die x-Position der Box versetzt!
Ein Klick auf den Text erzeugt dann einen Cursor 2cm weiter rechts, wenn die Box 2cm Abstand zum Linken Seitenrand hat!
Mit gedrückter Maustaste dann Textbereiche markieren ist ebenfalls um diesen Betrag versetzt!
Habe ich da noch eine Einstelloption übersehen?
Ciao
Stefan