Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Изменяется шрифт у текста в ShowMessage()


Автор: malor 21.10.2012, 16:56
В коде есть вызов:

Код
ShowMessage('Ошибка выполнения NetQueryDisplayInformation():' + #13#10 + SysErrorMessage(GetLastError));


При нажатии баттона на форме как раз с таким мессиджем и сталкивается пользователь.
Так вот при первом появлении вид у сообщения:

user posted image

При втором (третьем, четвертом, ...):

user posted image

В честь чего разница ?

Delphi XE / Win7 SP1

Автор: MetalFan 21.10.2012, 21:48
malor, хм, первый раз такое вижу... подождем других мнений.

Автор: БелАмор 21.10.2012, 22:48
Цитата
Изменяется шрифт у текста в ShowMessage(), начиная со второго раза

А то, что сам текст обрезан, вас не беспокоит?
Быстрее всего где-то происходит запись по случайным адресам, и происходит это между вызовами ShowMessage. Приведите этот код.

Автор: northener 22.10.2012, 01:04
Цитата(malor @  21.10.2012,  16:56 Найти цитируемый пост)
В коде есть вызов:
ShowMessage('Ошибка выполнения NetQueryDisplayInformation():' + #13#10 + SysErrorMessage(GetLastError));


Логично предположить, что в коде есть неправильное или не совсем правильное использование блоков try...
Код, где вызывается данная строка в студию.


Автор: bems 15.11.2012, 01:10
посмотри количество gdi-хендлов, хоть и таскманагером

Автор: malor 20.11.2012, 12:05
Первый раз нажимаем кнопку "Получить":

user posted image

Второй:

user posted image

Третий:

user posted image

В "Диспетчере задач" вывел столбик "Объекты GDI". 

Количество меняется так:
1) Если запустить программу то их 33.
2) Нажать кнопку, появится мессиджбокс, число хэндлов - 37.
3) Закрываем мессиджбокс - их становится 35.
3) Снова жмём кнопку, при появлении окна с сообщением их теперь не 37, а 36 штук.
4) Закрываем мессиджбокс - их 35.
5) ... - 37.
6) ... - 35.
..........etc ..........

Аналогичные показатели дала и утилита GDIView.

Код
type

  TThreadInfo = class(TThread)
  private
    procedure GetInfo;
  protected
    procedure Execute; override;
  public
  end;

function GetInformation(): boolean;

// *****************************************************************************
implementation

procedure TThreadInfo.Execute;
begin
  inherited;

  GetInfo();

end;

//******************************************************
procedure TThreadInfo.GetInfo;
begin
  ShowMessage('Это наше сообщение.');
end;

function GetInformation(): boolean;
begin

  with TThreadInfo.Create(False) do
  begin
    FreeOnTerminate := True;
    Resume;
  end;


end;


Delphi XE

Автор: bems 20.11.2012, 12:15
аа, так ты в треде трогаешь VCL

и еще если CreateSuspended ты передаёшь False то уже нельзя делать FreeOnTerminate := True и не нужно Resume

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)