Hallo,
ich habe eine Textbox im Header, welche mehrere Zeilen Text sowie MergeFields enthält.
Im WPRichText1MouseUp möchte ich nun, wenn ein Mergefield angeklickt ist, darunter ein normales TPanel positionieren (was Controls enthält, die den Inhalt des Feldes ändern sollen).
Im Event habe ich X und Y und mit WPRichText.Left usw. kann ich genau an der Mausposition positionieren.
Ich möchte aber das Panel genau linksbündig mit dem Beginn des MergeFields und genau darunter haben, egal ob der User am Anfang, in der Mitte oder am Ende auf das Feld klickt.
Dazu brauche ich die Position des MergeFields....
Höhe und Breite habe ich gefunden, wie aber komme ich an die Position?
Folgendes habe ich probiert, komme aber damit nicht zum Ziel:
Code
field := WPRichText1.FieldAtCP(false);
// das zu positionierende Panel
PanelDate.Visible := false;
if field <> nil then
begin
// Schutz steht in den Extras
if field.Extra.IndexOf('Protected') <> -1 then
begin
// geschütztes Feld
WPRichText1.ProtectedProp := WPRichText1.ProtectedProp + [ppIsInsertpoint, ppIsMergedText,
ppProtectSelectedTextToo];
// geschützt gar keinen Cursor anzeigen
WPRichText1.EditOptionsEx := WPRichText1.EditOptionsEx + [wpdisableCaret];
// ist es ein Feld mit Datums-Panel?
if field.Extra.IndexOf('Date') <> -1 then
begin
if WPRichText1.GetLineFromXY(X, Y, par, posinpar) then
begin
WPRichText1.IgnoreMouse; // Sonst selektiert die Maus!
pt := WPRichText1.GetPointFromParLin(par, 0);
// Umrechnuing für z.B. PopUpMenüs
// pt := WPRichText1.ClientToScreen(pt);
PanelDate.Left := pt.X + WPRichText1.Left;
PanelDate.top := pt.Y + WPRichText1.top;
PanelDate.Visible := true;
end;
end;
end
Alles anzeigen
Danke
Ciao
Stefan