|
Вопрос # 6 502/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Я создал компоненте на основе TEdit и привязал к нему TBalloonHint. И если закрыть форму во время отображения подсказки, то вылетает access violation для vcl140.bpl. С деструкторами всё в порядке. Насильно спрятать подсказку перед разрушением при разрушении родительского для неё TEdit тоже не удаётся. Из этой ситуации есть какой-то выход? Какой?
P.S. "Не пользоваться" - не предлагать.
 |
Вопрос задал: dmistand (статус: 1-ый класс)
Вопрос отправлен: 14 декабря 2013, 18:30
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 14 декабря 2013, 22:22; участников в обсуждении: 2.
|
min@y™ (статус: Доктор наук), 14 декабря 2013, 18:39 [#1]:
Код дай посмотреть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
dmistand (статус: 1-ый класс), 14 декабря 2013, 19:16 [#2]:
min@y™:
interface
TSmartEdit = class(TEdit)
strict private
FBalloonHint: TBalloonHint;
procedure SetBalloonShowTime(value: Integer);
procedure ShowBalloon;
function GetBalloonShowTime: Integer;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property BalloonShowTime: Integer read GetBalloonShowTime write SetBalloonShowTime;
end;
implementation
constructor TSmartEdit.Create(AOwner: TComponent);
begin
inherited;
FBalloonHint := TBalloonHint.Create(Self);
FBalloonHint.Delay := 0;
FBalloonHint.HideAfter := 3000;
Text := '0';
Alignment := taCenter;
Width := 70;
end;
destructor TSmartEdit.Destroy;
begin
FBalloonHint.Free;
inherited;
end;
function TSmartEdit.GetBalloonShowTime: Integer;
begin
Result := FBalloonHint.HideAfter;
end;
procedure TSmartEdit.SetBalloonShowTime(value: Integer);
begin
FBalloonHint.HideAfter := value;
end;
procedure TSmartEdit.ShowBalloon;
var str: string;
begin
str := 'Разрешены только ';
if not FInputOptions.IsNegativeAllowed then str := str + 'неотрицательные ';
case FInputOptions.ValueType of
vtInteger: str := str + 'целые ';
vtFloat: str := str + 'действительные ';
end;
str := str + 'числа';
FBalloonHint.Title := str;
FBalloonHint.ShowHint(Self);
end;
В классе ещё есть подкласс TInputOptions, я его вытер, чтобы не загромождать экран.
|
|
min@y™ (статус: Доктор наук), 14 декабря 2013, 19:41 [#3]:
Криминала не вижу. Где вываливается Еррор?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
dmistand (статус: 1-ый класс), 14 декабря 2013, 22:22 [#4]:
min@y™: криминала и нет. Потому я и здесь, что криминала нет, а подобного опыта - тоже. Если на форме есть такой контрол, хинт показан, и форму закрыть - вот тут и вываливается ошибка - если совсем точно, то на строке FBalloonHint.Free;
Я пытался его скрыть через FBalloonHint.HideHint - не помогло... Пробовал FreeOnRelease, но это вообще к БД, наверное, относится, судя по исходнику.
Вот и кончились идеи. Гугл тоже толком ничего не показывает, или я не так гуглю.
|
4 октября 2015, 14:35: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|