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