|
Вопрос # 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 за советы и потраченое время.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|