Тупой вопрос новичка про TRect

Тупой вопрос новичка про TRect
Дата: 05.06.2009 17:03:43
Приветствую. Вопросик тупейший... но...

Итак. Мне нужно отобразить Hint. Все ок, он выводится :)

Вывожу я его через создание THintWindow и юзаю ActivateHint.

Вот метод ActivateHint принимает первым параметром TRect.
Так вот, я туда запуляю функцию CalcHintRect. В общем вот код:

procedure TForm1.cxMemo1KeyPress(Sender: TObject; var Key: Char);
begin
IF h<>nil
  then H.ReleaseHandle;   -- Если счас кто то уже показывает хинт - то скроем его.

  H:=THintWindow.Create(Self);
  H.ActivateHint(H.CalcHintRect(100,'Hello',nil),'Hello');
end;

H - описано как глобальная переменная...

ТАК ВОТ все работает. НО ппочему то чертов хинт показывается в левом-верхнем углу экрана.. енто конечно же не красиво... Я хочу показывать там где надо...

НО мое желание натыкается на непонятную мне вещь O_o..... Вот такой код я написал:

procedure TForm1.cxMemo1KeyPress(Sender: TObject; var Key: Char);
var
  Rec: TRect;
begin
IF h<>nil
  then H.ReleaseHandle;

  Rec  := H.CalcHintRect(100,'Hello',nil);  <<<<< Вот тут вылетает исключение Access Violation !

  ... тут я буду заменять top, left и т.д.

  H:=THintWindow.Create(Self);
  H.ActivateHint(Rec,'Hello');
end;

Так вот.... Почему вылетает ацесс виолейшн то ??????
TRect енто структура... память же не нужно выделять....

Как побороть ?....
SNike
Дата: 05.06.2009 17:09:28
IF h<>nil
then H.ReleaseHandle;

Сам удаляешь H

H.CalcHintRect

И пытаешься обратиться к тому что только что удалил
Спасибо
Дата: 05.06.2009 17:12:40
Спасибо..... Мдя... Туплю... учуся......

Действительно же... я просто забыл создать сначало... мдя....


причем в первом то варианте кода я создаю
H:=THintWindow.Create(Self);

а потом че то видимо стер и потому даже не подумал что он не создается... Блин... Спасибо :)
MAX2002
Дата: 05.06.2009 17:13:57
Внимательней надо быть, внимательней
IF h<>nil
then H.ReleaseHandle;

Rec := H.CalcHintRect(100,'Hello',nil); <<<<< Вот тут вылетает исключение Access Violation !
Ты сначало освобождаешь хендл, а потом еще пытаешься к этому объекту обратиться
угу угу ) я понял
Дата: 05.06.2009 17:29:33
я понял понял в чем проблема )))


Просто в первом варианте я ведь создаю окно :) - как вы можете видеть в примере..... а во втором я видимо стер случайно


И чем мне даже в голову не пришло задуматся что я его не создаю )

Помните фильм трасса 60 ? Когда там глав герою в больнице показывали карты ) Там типа были красные трефы и пики )))) Т.е. он их даже не заметил.... Так и тут я... Я знаю что ацесс виолейшн вылетает когда объекты не созданы... но просто и мысли даже не появилось на то, что H не создается :) поентому подумал на TRect :)
Снова я...
Дата: 05.06.2009 17:44:51
А подскажите плиз мелкий вопрос.... Не хочется новую тему из-за ентого создавать...

Некоторые методы принимают TPoint структуру.

Вопрос... Можно ли как то передать в метод сразу значения ?... или нужно ОБЯЗАТЕЛЬНО в var прописать переменную типа TPoint, а потом последовательно присвоить ей значения и потом уже передать в метод ?

Может мона как нить передать как нить так:

SomeMetod (TPoint (34,34));

или необходимо:

var
  P := TPoint;
begin
  P.X := 34;
  P.Y := 34;

  SomeMetod (P); 
end;

хочется как то попроще чем во втором варианте описать... енто возможно ?...
Barmaley57
Дата: 05.06.2009 17:46:44
Point(x,y)
А класно. Спасибо
Дата: 05.06.2009 18:02:30
Спасибо.... Блин... даже не подумал что так просто...мдя..... ну лан....