Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.09.22;
Скачать: CL | DM;

Вниз

Вопрос по отрисовке текста при 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
15-1365507314
Copyrighter
2013-04-09 15:35
2013.09.22
Регистрация ПО


11-1248179284
DevilDevil
2009-07-21 16:28
2013.09.22
Дайте кто-нибудь KOL_MCK для Delphi6


15-1365798603
Юрий
2013-04-13 00:30
2013.09.22
С днем рождения ! 13 апреля 2013 суббота


3-1293012227
adigozelov
2010-12-22 13:03
2013.09.22
запрос


4-1266617984
Deltas
2010-02-20 01:19
2013.09.22
Координаты области уведомлений