Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.002 c
1-1266331114
sniknik
2010-02-16 17:38
2013.09.22
Печать RTF (RichView ? другое ?)


2-1357584844
N.Cage
2013-01-07 22:54
2013.09.22
Проблема с QuickReport


1-1314615724
denkop
2011-08-29 15:02
2013.09.22
Вопрос по отрисовке текста при TLabel.Enabled=false


15-1365670567
Dmitry1987
2013-04-11 12:56
2013.09.22
покупка Verisign


2-1357371621
Handler
2013-01-05 11:40
2013.09.22
исключить дублирование в ComboBox ах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский