Форум: "Основная";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];
ВнизВопрос по отрисовке текста при TLabel.Enabled=false Найти похожие ветки
← →
denkop (2011-08-29 15:02) [0]Возникла необходимость при TLabel.Enabled=false видеть текст такой как при TLabel.Enabled=True. Проблема в том, чтобы TLabel который будет лежать на TImage мешает работать событиям onmousemove onmouseenter onmouseleave. Если поставить TLabel.Enabled=false, всё происходит как надо за исключением того что текст становится неактивным.. Нашёл статью как нарисовать неактивный произвольный текст: http://demi-s.narod.ru/other/067.html я так понимаю что TLabel тоже где то имеет вызов DrawState(...) Порывшись в исходниках TLabel, не нашёл нигде вызова это процедуры, очень хочется убрать оттуда DSS_DISABLED когда у TLabel.Enabled=false.. Подскажите пож, как решить проблему?
← →
И. Павел © (2011-08-29 15:22) [1]Можно использовать вместо TLabel компонент TPanel без бордюров. Текст на нем всегда остается одного цвета и при Panel.enabled=false он не будет мещать приемом событий. Можно разместить на нем и Label - если Panel.Enabled = false, Label не сменит цвет.
← →
denkop (2011-08-29 16:28) [2]
unit ButtonLabel;
interface
uses
SysUtils, Classes, Controls, StdCtrls, Types, Windows, Graphics;
type
TButtonLabel = class(TLabel)
private
{ Private declarations }
protected
{ Protected declarations }
procedure DoDrawText(var Rect: TRect; Flags: Longint); override;
public
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Standard", [TButtonLabel]);
end;
procedure TButtonLabel.DoDrawText(var Rect: TRect; Flags: Integer);
const
EllipsisStr = "...";
Ellipsis: array[TEllipsisPosition] of Longint = (0, DT_PATH_ELLIPSIS,
DT_END_ELLIPSIS, DT_WORD_ELLIPSIS);
var
Text, DText: string;
NewRect: TRect;
Height, Delim: Integer;
begin
Text := GetLabelText;
if (Flags and DT_CALCRECT <> 0) and
((Text = "") or ShowAccelChar and (Text[1] = "&") and (Length(Text) = 1)) then
Text := Text + " ";
if Text <> "" then
begin
if not ShowAccelChar then Flags := Flags or DT_NOPREFIX;
Flags := DrawTextBiDiModeFlags(Flags);
Canvas.Font := Font;
if (EllipsisPosition <> epNone) and not AutoSize then
begin
DText := Text;
Flags := Flags and not DT_EXPANDTABS;
Flags := Flags or Ellipsis[EllipsisPosition];
if WordWrap and (EllipsisPosition in [epEndEllipsis, epWordEllipsis]) then
begin
repeat
NewRect := Rect;
Dec(NewRect.Right, Canvas.TextWidth(EllipsisStr));
DrawText(Canvas.Handle, DText, Length(DText), NewRect, Flags or DT_CALCRECT);
Height := NewRect.Bottom - NewRect.Top;
if (Height > ClientHeight) and (Height > Canvas.Font.Height) then
begin
Delim := LastDelimiter(" "#9, Text);
if Delim = 0 then
Delim := Length(Text);
Dec(Delim);
{$IF NOT DEFINED(CLR)}
if ByteType(Text, Delim) = mbLeadByte then
Dec(Delim);
{$IFEND}
Text := Copy(Text, 1, Delim);
DText := Text + EllipsisStr;
if Text = "" then
Break;
end else
Break;
until False;
end;
if Text <> "" then
Text := DText;
end;
DrawText(Canvas.Handle, Text, Length(Text), Rect, Flags);
end;
end;
end.
← →
denkop (2011-08-29 16:28) [3]проблема решена!
← →
Омлет © (2011-08-30 10:36) [4]Проблема - в неверном выборе способа решения задачи. И, боюсь, она не решена.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c