Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 021

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Я очень даже начинаюий.Написал простенькие часики
чтобы красивей смотрелись форму и Label ы сделал прозрачными и столкнулся с тем что цифры во время работы накладываются друг на друга.Если прозрачность Label убираю то все становится нормально.Подскажите пожалуйста как быть?

Приложение:
  1. unit Clock;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, Buttons,DateUtils, ExtCtrls,ComCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Label1: TLabel;
  12. Label2: TLabel;
  13. Label3: TLabel;
  14. Label4: TLabel;
  15. Label5: TLabel;
  16. SpeedButton1: TSpeedButton;
  17. SpeedButton2: TSpeedButton;
  18. Timer1: TTimer;
  19. procedure FormCreate(Sender: TObject);
  20. procedure SpeedButton1Click(Sender: TObject);
  21. procedure Timer1Timer(Sender: TObject);
  22. private
  23. { Private declarations }
  24. public
  25. { Public declarations }
  26. end;
  27.  
  28. var
  29. Form1: TForm1;
  30.  
  31. implementation
  32.  
  33. {$R *.dfm}
  34. var
  35. Hour,Min,Sec: word; //âðåìÿ íà èíäèêàòîðå
  36. // íà÷àëî ðàáîòû ïðîãðàììû
  37. procedure TForm1.FormCreate(Sender: TObject);
  38. begin
  39. Form1.Brush.Style := bsClear; // ïðîçðà÷íîñòü
  40. Form1.BorderStyle := bsNone; // ôîðìû
  41. Hour := HourOf(Now);
  42. Min := MinuteOf(Now);
  43. Sec := SecondOf(Now);
  44. Label1.Caption := IntToStr(Hour);
  45. if Min < 10
  46. then Label3.Caption := '0' + IntToStr(Min)
  47. else Label3.Caption := IntToStr(Min);
  48. if Sec < 10
  49. then Label5.Caption := '0' + IntToStr(Sec)
  50. else Label5.Caption := IntToStr(Sec);
  51. end;
  52.  
  53. procedure TForm1.SpeedButton1Click(Sender: TObject);
  54. begin
  55. Form1.Close; // &#231;&#224;&#234;&#240;&#251;&#242;&#232;&#229; &#239;&#240;&#238;&#227;&#240;&#224;&#236;&#236;&#251;
  56. end;
  57.  
  58. // &#241;&#232;&#227;&#237;&#224;&#235; &#238;&#242; &#242;&#224;&#233;&#236;&#229;&#240;&#224;
  59. procedure TForm1.Timer1Timer(Sender: TObject);
  60. var
  61. cHour,cMin,cSec: word;
  62. begin
  63. // &#239;&#238;&#235;&#243;&#247;&#232;&#242;&#252; &#242;&#229;&#234;&#243;&#249;&#229;&#229; &#226;&#240;&#229;&#236;&#255;
  64. cHour := HourOf(Now);
  65. cMin := MinuteOf(Now);
  66. cSec := SecondOf(Now);
  67. if Timer1.Tag = 0 //&#238;&#234;&#237;&#238; &#237;&#224; &#253;&#234;&#240;&#224;&#237;&#229;
  68. then begin
  69. // &#239;&#240;&#238;&#226;&#229;&#240;&#232;&#236; &#241;&#238;&#226;&#239;&#224;&#228;&#229;&#237;&#232;&#229; &#242;&#229;&#234;&#243;&#249;&#229;&#227;&#238; &#226;&#240;&#229;&#236;&#229;&#237;&#232;
  70. if cHour <> Hour then
  71. begin
  72. Hour := cHour;
  73. Label1.Caption := IntToStr(Hour);
  74. end;
  75.  
  76. if cMin <> Min then
  77. begin
  78. Min := cMin;
  79. if Min < 10
  80. then Label3.Caption := '0' + IntToStr(Min)
  81. else Label3.Caption := IntToStr(Min);
  82. end;
  83.  
  84. if cSec <> Sec then
  85. begin
  86. Sec := cSec;
  87. if Sec <10
  88. then Label5.Caption := '0' + IntToStr(Sec)
  89. else Label5.Caption := IntToStr(Sec);
  90. end;
  91. end;
  92.  
  93. end;
  94. end.


igoriy Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: igoriy (статус: Посетитель)
Вопрос отправлен: 21 июля 2009, 19:30
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, igoriy!
А зачем вы в несколько Label'ов пишите? Записывайте весь текст в один

Приложение:
  1. Hour := HourOf(Now);
  2. Min := MinuteOf(Now);
  3. Sec := SecondOf(Now);
  4. Label1.Caption := IntToStr(Hour)+':';
  5. if Min < 10
  6. then Label1.Caption := Label1.Caption + ':0' + IntToStr(Min)
  7. else Label1.Caption := Label1.Caption + ':' + IntToStr(Min);
  8. if Sec < 10
  9. then Label1.Caption := Label1.Caption + ':0' + IntToStr(Sec)
  10. else Label1.Caption := Label1.Caption + ':' + IntToStr(Sec);
  11.  
  12. --------
  13.  
  14.  
  15. Label1.Caption := TimeToStr(Now);
  16.  


Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 22 июля 2009, 10:51
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 16; последнее сообщение — 22 июля 2009, 11:48; участников в обсуждении: 5.
Вадим К

Вадим К (статус: Академик), 21 июля 2009, 19:40 [#1]:

а почему бы не использовать один label и не морочить себе голову? Думаю, что вся проблема в векторых шрифтах. Выбирете любой моноширный и посмотрите на результат (например Courier)
Галочка "подтверждения прочтения" - вселенское зло.
igoriy

igoriy (статус: Посетитель), 21 июля 2009, 19:51 [#2]:

Спасибо.Но может я не правильно задал вопрос? дело в том что допустим на секундах, не стираютя предыдущие показания а на них накладываются новые на 1 накладывается 2 на эту кашу 3 и т д
min@y™

min@y™ (статус: Доктор наук), 21 июля 2009, 20:08 [#3]:

Попробуй у того контрола, на котором лежил Label, сделать DoubleBuffered:= True. Вдруг поможет?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
igoriy

igoriy (статус: Посетитель), 21 июля 2009, 20:11 [#4]:

Помогло но прозрачность ушла Label стал черным
min@y™

min@y™ (статус: Доктор наук), 21 июля 2009, 20:21 [#5]:

Странно...
ParentColor:= True попробуй.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
igoriy

igoriy (статус: Посетитель), 21 июля 2009, 20:26 [#6]:

Ваще ничего не меняется. А кстати вот Edit Clear - ом можно очистить а Label можно как нибудь очищать? Если перед каждым запросом к таймеру?
Вадим К

Вадим К (статус: Академик), 21 июля 2009, 20:29 [#7]:

а, ну так все меняет. Цифры накладываются... Да. накладываются... обычно для такого скриншоты прикладывают.
Наверно стоит форме посылать Form1.Repaint или Form1.Refresh в самом конце процедуры таймера.
Галочка "подтверждения прочтения" - вселенское зло.
igoriy

igoriy (статус: Посетитель), 21 июля 2009, 20:42 [#8]:

Попробовал- ничего. Почему именно на прозрачном Label такая ерунда?
Вадим К

Вадим К (статус: Академик), 21 июля 2009, 20:48 [#9]:

предлагаю попробовать StaticText (на вкладке Additional) вместо Label.
Галочка "подтверждения прочтения" - вселенское зло.
igoriy

igoriy (статус: Посетитель), 21 июля 2009, 21:00 [#10]:

Я еще не пользовался этим по неопытности использовал как Label и вот [Error] Clock.pas(51): Incompatible types: 'TStaticText' and 'String'
Вадим К

Вадим К (статус: Академик), 21 июля 2009, 21:03 [#11]:

а в коде это наверно выглядело как
StaticText1 := insttostr(...);
да?
Галочка "подтверждения прочтения" - вселенское зло.
igoriy

igoriy (статус: Посетитель), 21 июля 2009, 21:08 [#12]:

Да
Ученый

Ученый (статус: 8-ой класс), 21 июля 2009, 21:20 [#13]:

А может все таки попробывать:
StaticText1.Caption:=inttostr(...);

:))
igoriy

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

igoriy (статус: Посетитель), 22 июля 2009, 11:48 [#16]:

Егор спасибо огромное все коротко и красиво.Я делал несколько
Label и переменных чтобы в последствии сделать будильник ну естественно и по неопытности а искал все по запроу гуглу пока не нашел этот сайт там только про прозрачность листинг сложный на две страницы а оказывается все можно проще.
Спасибо всем :Егору ,Вадиму К,Ученому,min@y за советы и потраченое время.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:53
Выполнено за 0.02 сек.