基本的な書式/マークアップのサポートでDelphiのラベルコンポーネントを検索するDelphi Markup Label (MDLabel)が見つかりました。それはボーナスとしてリンクをサポートします。残念ながら私はそれを働かせることはできません。このコンポーネントは、単一のMD_Label.pasファイルとして提供されます。私はそれのためのコンポーネントパッケージを作成し、それをインストールしました。私は今、コンポーネントのリストから選択しますが、フォームに追加すると、エラーがスローされますすることができますDelphiのマークアップラベルで "Control 'MDLabel1'に親ウィンドウがありません。"
Control 'MDLabel1' has no parent window."
私はコールCreateWnd
にそれをトレースし、同様の問題のいくつかのトピックを見つけましたが、まだすることができませんでしたこれを解決する。私は間違ったことをしましたか、初期のコードがDelphi 2007のために書かれていて、私はXEを使用しているので、これを調整する必要がありますか?
ここにはソースコード全体を投稿するためのコンポーネントがありますが、上記のリンクからダウンロードできます。ここで作成部です:
constructor TMDLabel.Create(AOwner: TComponent);
begin
FInitialized := False; // required for runtime creation of MDLabel
inherited;
ControlStyle := [csOpaque, csCaptureMouse, csClickEvents, csSetCaption];
FLinkFontNormal := TFont.Create;
FLinkFontNormal.Assign(Font);
FLinkFontNormal.Color := clBlue;
FLinkFontNormal.Style := [];
FLinkFontHover := TFont.Create;
FLinkFontHover.Assign(Font);
FLinkFontHover.Color := clRed;
FLinkFontHover.Style := [fsUnderline];
Width := 100;
Height := 13;
Cursor := crArrow;
TabStop := False;
DoubleBuffered := True;
FTextHeight := 0;
FAutoSizeWidth := True;
FAutoSizeHeight := True;
FTextAlignment := taLeftJustify;
FCompressSpaces := False;
FTabWidth := 8;
FParsingText := False;
FBuildingLines := False;
FRebuildLines := False;
FMaxWidth := 0;
FLinkFontNormal.OnChange := DoFontChange;
FLinkFontHover.OnChange := DoFontChange;
FOnLinkClicked := nil;
FOnPaintBackground := nil;
FOnHeightChanged := nil;
FOnWidthChanged := nil;
FLines := TList.Create;
FWords := TList.Create;
FLinkRCs := TList.Create;
FMouseDownMove := False;
FMouseWasDown := False;
FMouseDownIndex := - 1;
FInitialized := True;
end;
procedure TMDLabel.CreateWnd;
begin
inherited CreateWnd;
{$IFNDEF UNICODE}
if (inherited Caption <> '') and (FCaptionUTF8 = '') then CaptionUTF8 := inherited Caption;
{$ENDIF}
end;
完全なソース:http://pastebin.com/sxYvpqTy
側の注意点としては:あなたは、ラベル内の整形テキストをサポートし、より良い部品があることを感じた場合は、コメントとして共有すること自由に感じなさい(TJvHTLabelとTJvMarkupLabelはではなく、が良い)。
私はJvラベルを一度も使用していません。しかしおそらく彼らは働いています。なぜ彼らは「良い」ではないのに対し、フォームにドロップさえできないものは何ですか? –
問題はCreateWndにありません。問題は、コントロールに親がないことです。 –
私はコンポーネントをDLにしません。しかし、問題を理解する上で重要な要素はコンポーネントの階層です。次に、 'SetParent'がオーバーライドされているかどうか、どのようにして階層全体をチェックインします。例外を引き起こす可能性のあるコードに注意してください。 –