C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Немодальная форма не отображает TLabel, как-то странно
Treumer
Отправлено: 24.02.2005, 11:26


Станционный диспетчер

Группа: Участник
Сообщений: 92



Вызываю немодальную форму следующим образом:
DBUpdate->Show();

На форме лежат TPanel, TLabel, TProgressBar.

Затем изменяю прогресс в TProgressBar.
TProgressBar прогресс отображает, а вот TPanel, TLabel так и не отображаются!

В чем может быть дело, а ?!
AVC
Отправлено: 24.02.2005, 11:51


Ветеран

Группа: Модератор
Сообщений: 1583



А если вызвать Invalidate то же не отображается?
Treumer
Отправлено: 24.02.2005, 12:11


Станционный диспетчер

Группа: Участник
Сообщений: 92



QUOTE (AVC @ 24/02/2005, 11:51)
А если вызвать Invalidate то же не отображается?

Нет! sad.gif
AVC
Отправлено: 24.02.2005, 12:33


Ветеран

Группа: Модератор
Сообщений: 1583



Значит вы не тому Label'у меняете Caption. smile.gif

Вот коду N лет — еще не подводил. Найдите отличия. smile.gif
CODE

PACKAGE void __fastcall Msg4lShow
 (const AnsiString& msg1
 ,const AnsiString& msg2
 ,const AnsiString& msg3
 ,const AnsiString& msg4
 )
{
if (F_Msg4l == NULL) F_Msg4l = new TF_Msg4l(Application);

const AnsiString estr = "";

if (!F_Msg4l->Visible)   // Init show
{  F_Msg4l->Label1->Caption = (msg1.IsEmpty())? estr: msg1;
   F_Msg4l->Label2->Caption = (msg2.IsEmpty())? estr: msg2;
   F_Msg4l->Label3->Caption = (msg3.IsEmpty())? estr: msg3;
   F_Msg4l->Label4->Caption = (msg4.IsEmpty())? estr: msg4;

   F_Msg4l->Show();
}

else   // Change message
{  if (!msg1.IsEmpty()) F_Msg4l->Label1->Caption = msg1;
   if (!msg2.IsEmpty()) F_Msg4l->Label2->Caption = msg2;
   if (!msg3.IsEmpty()) F_Msg4l->Label3->Caption = msg3;
   if (!msg4.IsEmpty()) F_Msg4l->Label4->Caption = msg4;
}

F_Msg4l->Update();
}

Treumer
Отправлено: 24.02.2005, 12:36


Станционный диспетчер

Группа: Участник
Сообщений: 92



Я создаю форму следующим кодом:
Application->CreateForm(__classid(TDBUpdate), &DBUpdate);

Может в этом дело ?!
AVC
Отправлено: 24.02.2005, 13:01


Ветеран

Группа: Модератор
Сообщений: 1583



Нет (проверено).
Treumer
Отправлено: 24.02.2005, 13:08


Станционный диспетчер

Группа: Участник
Сообщений: 92



Ну вот тут .dfm файл, где же ошибка ?!
CODE

object DBUpdate: TDBUpdate
 Left = 280
 Top = 207
 Cursor = crHourGlass
 AutoScroll = False
 Caption = 'Datbaseupdate'
 ClientHeight = 171
 ClientWidth = 402
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -13
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 Visible = True
 OnShow = FormShow
 PixelsPerInch = 120
 TextHeight = 16
 object Panel1: TPanel
   Left = 0
   Top = 0
   Width = 402
   Height = 171
   Align = alClient
   BevelInner = bvLowered
   TabOrder = 0
   object DBUpdateLabel: TLabel
     Left = 40
     Top = 16
     Width = 320
     Height = 42
     Alignment = taCenter
     Caption = 'Databaseupdate'
     FocusControl = DBUpdateProgress
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clHighlight
     Font.Height = -35
     Font.Name = 'Tahoma'
     Font.Style = []
     ParentFont = False
   end
   object DBUpdateProgress: TProgressBar
     Left = 40
     Top = 80
     Width = 320
     Height = 49
     Min = 0
     Max = 100
     TabOrder = 0
   end
 end
end
AVC
Отправлено: 24.02.2005, 13:59


Ветеран

Группа: Модератор
Сообщений: 1583



Подключил ваш dfm. (На будущее — лучше прикрепляйте обычные файлы к сообщению)
На другой форме поставил кнопку, при нажатии
DBUpdate->DBUpdateLabel->Caption = FormatDateTime("dd.mm.yyyy hh:nn:ss", Now());
DBUpdate->Show();

И как вы думаете, что я вижу если ее нажимаю? Правильно — текущее время.
Так что ошибок нет.
Boyko
Отправлено: 24.02.2005, 14:46


Станционный диспетчер

Группа: Участник
Сообщений: 88



А если вызвать Application->ProcessMessages() то же не отображается?
Treumer
Отправлено: 24.02.2005, 15:46


Станционный диспетчер

Группа: Участник
Сообщений: 92



QUOTE (Boyko @ 24/02/2005, 14:46)
А если вызвать Application->ProcessMessages() то же не отображается?

О! Спасибо!
Сработало! smile.gif
Gedeon
Отправлено: 24.02.2005, 17:28


Ветеран

Группа: Модератор
Сообщений: 1742



Жаль труда и времени AVC
Rius
Отправлено: 25.02.2005, 22:03


Мастер участка

Группа: Участник
Сообщений: 321



Я когла-то делал так (в главном файле проекта):
CODE
                FormSplash = new TFormSplash(Application);
                FormSplash->Show();
                FormSplash->Update();
                Application->Initialize();
                FormSplash->Label->Caption = "Создание главного окна...";
                FormSplash->Update();
                Application->HelpFile = "";
                Application->Title = "БД Билеты";
                Application->CreateForm(__classid(TFormMain), &FormMain);
                FormSplash->Label->Caption = "Создание окна календарей...";
                FormSplash->Update();
                Application->CreateForm(__classid(TFormCalend), &FormCalend);
                FormSplash->Label->Caption = "Железные дороги...";
                FormSplash->Update();
.....
                FormSplash->Label->Caption = "Запуск...";
                FormSplash->Update();
                FormSplash->Close();
                delete FormSplash;
                Application->Run();


Вернуться в Вопросы программирования в C++Builder