| 
| 
 | Вопрос # 3 021/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Я очень даже начинаюий.Написал простенькие часики
 чтобы красивей смотрелись форму и Label ы сделал прозрачными и столкнулся с тем что цифры во время работы накладываются друг на друга.Если прозрачность Label убираю то все становится нормально.Подскажите пожалуйста как быть?
 Приложение:Переключить в обычный режим unit Clock; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons,DateUtils, ExtCtrls,ComCtrls; type  TForm1 = class(TForm)    Label1: TLabel;    Label2: TLabel;    Label3: TLabel;    Label4: TLabel;    Label5: TLabel;    SpeedButton1: TSpeedButton;    SpeedButton2: TSpeedButton;    Timer1: TTimer;    procedure FormCreate(Sender: TObject);    procedure SpeedButton1Click(Sender: TObject);    procedure Timer1Timer(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; var  Form1: TForm1; implementation {$R *.dfm}var   Hour,Min,Sec: word;  //âðåìÿ íà
èíäèêàòîðå// íà÷àëî
ðàáîòû
ïðîãðàììûprocedure TForm1.FormCreate(Sender: TObject);begin   Form1.Brush.Style := bsClear;  //
ïðîçðà÷íîñòü   Form1.BorderStyle := bsNone;   // ôîðìû   Hour := HourOf(Now);   Min := MinuteOf(Now);   Sec := SecondOf(Now);   Label1.Caption := IntToStr(Hour);   if Min < 10      then Label3.Caption := '0' + IntToStr(Min)      else Label3.Caption := IntToStr(Min);   if Sec < 10      then Label5.Caption := '0' + IntToStr(Sec)      else Label5.Caption := IntToStr(Sec);end; procedure TForm1.SpeedButton1Click(Sender: TObject);begin   Form1.Close;        //
çàêðûòèå
ïðîãðàììûend; // ñèãíàë îò
òàéìåðàprocedure TForm1.Timer1Timer(Sender: TObject);var   cHour,cMin,cSec: word;begin   // ïîëó÷èòü
òåêóùåå
âðåìÿ   cHour := HourOf(Now);   cMin := MinuteOf(Now);   cSec := SecondOf(Now);   if Timer1.Tag = 0 //îêíî íà
ýêðàíå   then begin          // ïðîâåðèì
ñîâïàäåíèå
òåêóùåãî
âðåìåíè          if cHour <> Hour then        begin           Hour := cHour;           Label1.Caption := IntToStr(Hour);        end;         if cMin <> Min then        begin           Min := cMin;           if Min < 10              then Label3.Caption := '0' + IntToStr(Min)              else Label3.Caption := IntToStr(Min);        end;         if cSec <> Sec then        begin           Sec := cSec;            if Sec <10               then Label5.Caption := '0' + IntToStr(Sec)               else Label5.Caption := IntToStr(Sec);        end;end; end;end.
|  |   Вопрос задал: igoriy (статус: Посетитель)Вопрос отправлен: 21 июля 2009, 19:30
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Егор Здравствуйте, igoriy!А зачем вы в несколько Label'ов пишите? Записывайте весь текст в один
 Приложение:Переключить в обычный режим    Hour := HourOf(Now);   Min := MinuteOf(Now);   Sec := SecondOf(Now);   Label1.Caption := IntToStr(Hour)+':';   if Min < 10      then Label1.Caption := Label1.Caption + ':0' + IntToStr(Min)      else Label1.Caption := Label1.Caption + ':' + IntToStr(Min);   if Sec < 10      then Label1.Caption := Label1.Caption + ':0' + IntToStr(Sec)      else Label1.Caption := Label1.Caption + ':' + IntToStr(Sec); --------     Label1.Caption := TimeToStr(Now); 
|  | Ответ отправил: Егор (статус: 10-ый класс)Время отправки: 22 июля 2009, 10:51
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 16; последнее сообщение — 22 июля 2009, 11:48; участников в обсуждении: 5. 
|   | Вадим К (статус: Академик), 21 июля 2009, 19:40 [#1]:а почему бы не использовать один label и не морочить себе голову? Думаю, что вся проблема в векторых шрифтах. Выбирете любой моноширный и посмотрите на результат (например Courier) Галочка "подтверждения прочтения" - вселенское зло. |  
|   | igoriy (статус: Посетитель), 21 июля 2009, 19:51 [#2]:Спасибо.Но может я не правильно задал вопрос? дело в том что допустим на секундах, не стираютя предыдущие показания а на них накладываются новые на 1 накладывается 2 на эту кашу 3 и т д |  
|   | min@y™ (статус: Доктор наук), 21 июля 2009, 20:08 [#3]:Попробуй у того контрола, на котором лежил Label, сделать DoubleBuffered:= True. Вдруг поможет? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | igoriy (статус: Посетитель), 21 июля 2009, 20:11 [#4]:Помогло но прозрачность ушла Label стал черным |  
|   | min@y™ (статус: Доктор наук), 21 июля 2009, 20:21 [#5]:Странно... ParentColor:= True попробуй.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | igoriy (статус: Посетитель), 21 июля 2009, 20:26 [#6]:Ваще ничего не меняется. А кстати вот Edit Clear - ом можно очистить а Label можно как нибудь очищать? Если перед каждым запросом к таймеру? |  
|   | Вадим К (статус: Академик), 21 июля 2009, 20:29 [#7]:а, ну так все меняет. Цифры накладываются... Да. накладываются... обычно для такого скриншоты прикладывают. Наверно стоит форме посылать Form1.Repaint или Form1.Refresh в самом конце процедуры таймера.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | igoriy (статус: Посетитель), 21 июля 2009, 20:42 [#8]:Попробовал- ничего. Почему именно на прозрачном Label такая ерунда? |  
|   | Вадим К (статус: Академик), 21 июля 2009, 20:48 [#9]:предлагаю попробовать StaticText (на вкладке Additional) вместо Label. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | igoriy (статус: Посетитель), 21 июля 2009, 21:00 [#10]:Я еще не пользовался этим по неопытности использовал как Label и вот [Error] Clock.pas(51): Incompatible types: 'TStaticText' and 'String' |  
|   | Вадим К (статус: Академик), 21 июля 2009, 21:03 [#11]:а в коде это наверно выглядело как StaticText1 := insttostr(...);
 да?
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | igoriy (статус: Посетитель), 21 июля 2009, 21:08 [#12]:Да |  
|   | Ученый (статус: 8-ой класс), 21 июля 2009, 21:20 [#13]:А может все таки попробывать: StaticText1.Caption:=inttostr(...);
 
 
  ) |  
|   | igoriy (статус: Посетитель), 22 июля 2009, 08:09 [#14]:[Error] Clock.pas(51): Incompatible types: 'TStaticText' and 'String' вот такая ошибка выпадает при StaticText1.Caption:=inttostr(...); может я делаю не так как надо? Я еще не пользовался StaticText |  
|   | Егор (статус: 10-ый класс), 22 июля 2009, 11:06 [#15]:Оп, не сразу понял, о чём речь в вашем вопросе - корректнее надо задавать, мол, предыдущие выведенные цифры не стираются, а новые пишутся поверх старых. Держите решение:
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 Form1.Color := clWhite; // Цвет формы - здесь вообще любой можно цвет указать - он потом станет прозрачным
 Form1.TransparentColorValue := clWhite; // укажем цвет, который будет выводиться прозрачным
 Form1.TransparentColor := True;         // укажем включить прозрачность
 Form1.BorderStyle := bsNone;
 Label1.Caption := TimeToStr(Now);
 end;
 
 procedure TForm1.Timer1Timer(Sender: TObject);
 begin
 Label1.Caption := TimeToStr(Now);
 end;
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | igoriy (статус: Посетитель), 22 июля 2009, 11:48 [#16]:Егор спасибо огромное все коротко и красиво.Я делал несколько Label и переменных чтобы в последствии сделать будильник ну естественно и по неопытности а искал все по запроу гуглу пока не нашел этот сайт там только про прозрачность листинг сложный на две страницы а оказывается все можно проще.
 Спасибо всем :Егору ,Вадиму К,Ученому,min@y за советы и потраченое время.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |