Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

ActiveX и WinApi   Найти похожие ветки 

 
Nick Denry ©   (2004-10-10 11:34) [0]

Народ, можно лли отказаться от использования ActiveForms и написать  
*.ocx на АПИ? И стоит ли оно того?


 
Sergey_Masloff   (2004-10-10 11:38) [1]

Можно.
Не стоит


 
Nick Denry ©   (2004-10-10 11:50) [2]

2. Sergey_Masloff   (10.10.04 11:38) [1]

Понятно.

Тогда следующий вопрос: как у ActiveX формы получить контекст устройства (HDC)?

FormName.Canvas.Handle отсутствует вроде как...


 
Nick Denry ©   (2004-10-10 11:57) [3]

2. Sergey_Masloff   (10.10.04 11:38) [1]

И еще один вопрос: А почему не стоит?
:))))

З.Ы.

- Знаете как заинтересовать идиота?
- Нет, а как?
- Завтра расскажу!


 
Sergey_Masloff   (2004-10-10 12:17) [4]

Nick Denry ©   (10.10.04 11:50) [2]
>Тогда следующий вопрос: как у ActiveX формы получить контекст >устройства (HDC)?
Работа с любым COM-объектом осуществляется через интерфейс. Объект реализующий интерфейс должен реализовать все методы интерфейса. Обратное не верно -> Интерфейс не содержит всех методов объекта.
 ActiveX форма реализует интерфейс IActiveFormX в котором свойства Handle нет. Теоретически ты можешь описать еще один интерфейс например IHandledForm с одним методом GetHandle, добавить этот интерфейс к списку реализуемых твоей формой и написать реализацию. Только все это не очень хорошо по-моему.


 
Nick Denry ©   (2004-10-10 12:36) [5]

Насколько я понимаю интервейс предназначем для внешенего использования, т.е. служит для использования иетодов интерфейса.  

Тогда объясню поставленную перед собой задачу:

В explorere (скажем папка "Мой компьютер") при выделении диска отображается информация о свободном/занятом месте на диске в виде круговой диаграммы. Как известно, используется гипертекстовый шаблон (скажем, Folder.htt в  папке Windir\Web). Так же известно, что в этот шаблом, как и в любую *.htm* страницу может быть помещен ActiveX-объект, который будет использоваться Internet Ixplorer"om / Explorer"om..

Я хотел т очно так же, в зависимости от переменной %THISDIRPATH% отображать информацию о дисках / папках, но в виде диаграммы типа
bars, которую хотел сделать след. образом:


procedure TForm1.Button1Click(Sender: TObject);
var
Brush1, Brush2 : HBRUSH;
intDiskSize, intDiskFree,intFreePercent  : int64;

begin

GetDiskFreeSpaceEx("C:",intDiskFree,intDiskSize,nil);
{intDiskSize := DiskSize(0);
intDiskFree := DiskFree(0);}
intFreepercent := Round((intDiskFree*100)/intDiskSize);
Label1.Caption := IntToStr(intFreePercent );

Brush1 := CreateSolidBrush(RGB(192,192,255));
SelectObject(Form1.Canvas.Handle,Brush1);
Rectangle(Form1.Canvas.Handle,10,10,50,100);

Brush2 := CreateSolidBrush(RGB(64,64,255));
SelectObject(Form1.Canvas.Handle,Brush2);
Rectangle(Form1.Canvas.Handle,10,10+intFreePercent,50,100);

DeleteObject(Brush1);
DeleteObject(Brush2);

end;


Но потом обнаружилось, что в ActiveForms нет Canvas.Handle; Вот и думаю как мне быть?

Можно использовать , конечно, разнооокрашенные Panel"s изменяющие свои размеры, но, получается, мягко говоря, не очень...


 
Sergey_Masloff   (2004-10-10 12:50) [6]

Nick Denry ©   (10.10.04 12:36) [5]
>Насколько я понимаю интервейс предназначем для внешенего >использования, т.е. служит для использования иетодов >интерфейса.  
Да правильно

>SelectObject(Form1.Canvas.Handle,Brush1);
А в твоем ActiveX никаких глобальных переменных нет. Так что Form1 тут неуместно.

Напиши
>SelectObject(Self.Canvas.Handle,Brush1);
и так далее


 
Nick Denry ©   (2004-10-10 12:55) [7]

Пример, с Form1 - это не ActiveX - это я сам принцип в обычном проекте пробовал... :)

>SelectObject(Form1.Canvas.Handle,Brush1);
А в твоем ActiveX никаких глобальных переменных нет. Так что Form1 тут неуместно.

Напиши
>SelectObject(Self.Canvas.Handle,Brush1);
и так далее


Спасибо, сейсчас попробую...


 
Nick Denry ©   (2004-10-10 13:46) [8]

Возникла следующая прроблема:

Если использовать кнопку,  то все отрисовывается, а на метод THHCDsksps.ActiveFormPaint или THHCDsksps.ActiveFormCreate(Sender: TObject); ничего не происходит...

Правда, если в  THHCDsksps.ActiveFormCreate(Sender: TObject);  использовать задержку, то тоже отрисовывается... а так, значение лейблу присваивается верное в любом случае. Проблема только в отрисовке. Объявление объекта следующее:


<OBJECT ID="HHCDsksps1" WIDTH=127 HEIGHT=209
CLASSID="CLSID:1E758F9A-1829-4A11-823B-83485D673713">
   <PARAM NAME="Visible" VALUE="-1">
   <PARAM NAME="AutoScroll" VALUE="0">
   <PARAM NAME="AutoSize" VALUE="0">
   <PARAM NAME="AxBorderStyle" VALUE="0">
   <PARAM NAME="Caption" VALUE="HHCDsksps">
   <PARAM NAME="Color" VALUE="4278190095">
   <PARAM NAME="Font" VALUE="MS Sans Serif">
   <PARAM NAME="KeyPreview" VALUE="0">
   <PARAM NAME="PixelsPerInch" VALUE="96">
   <PARAM NAME="PrintScale" VALUE="1">
   <PARAM NAME="Scaled" VALUE="-1">
   <PARAM NAME="DropTarget" VALUE="0">
   <PARAM NAME="HelpFile" VALUE="">
   <PARAM NAME="ScreenSnap" VALUE="0">
   <PARAM NAME="SnapBuffer" VALUE="10">
   <PARAM NAME="DoubleBuffered" VALUE="0">
   <PARAM NAME="Enabled" VALUE="-1">
</OBJECT>


 
Nick Denry ©   (2004-10-10 19:18) [9]

up


 
Nick Denry ©   (2004-10-12 18:24) [10]

Что, никто, кроме Sergey_Masloff, не работал?


 
}|{yk ©   (2004-10-12 18:48) [11]

А ты не можешь в сохранять в png или jpeg и отображать уже картинку?


 
Kerk ©   (2004-10-12 18:50) [12]

Качай MASM32 8.0 там вся необходимая инфа для писания OCX на API. Правда примеры на асме.


 
Nick Denry ©   (2004-10-12 20:46) [13]

2Kerk ©   (12.10.04 18:50) [12]

А он у меня есть...

Примеры - те которые ICZELION"овские?

2}|{yk ©   (12.10.04 18:48) [11]

Спасибо за идею, но останется вопрос, как определить какой диск выдран в проводнике?


 
iZEN ©   (2004-10-12 20:56) [14]

/**Nick Denry ©   (10.10.04 11:34)
Народ, можно лли отказаться от использования ActiveForms и написать  
*.ocx на АПИ? И стоит ли оно того?
*/
Можно, так как Component Object Model я вляется неотъемлемой сущностью ActiveX/ActiveForms, но обратное неверно. COM - это бинарный формат, грубо говоря, это - спецификация того, что должно находиться по определённому смещению, определённой таблицы (VMT и способы работы). Но ActiveX/ActiveForms - это не просто COM, это файлы-КОНТЕЙНЕРЫ для COM-объектов, вот тут-то и возникают сложности с написанием "контейнеровозов". MASM поможет в построении EXE-, ой простите, OCX-файла, остальное за Вами.


 
Kerk ©   (2004-10-13 11:54) [15]


> Nick Denry ©   (12.10.04 20:46) [13]
> 2Kerk ©   (12.10.04 18:50) [12]
>
> А он у меня есть...
>
> Примеры - те которые ICZELION"овские?

Нет. Там есть папочка COM прямо в корне.


 
Nick Denry ©   (2004-10-13 16:43) [16]

Kerk ©   (13.10.04 11:54) [15]

Все, нашел, спасибо..



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
9-1087559839
Sormy
2004-06-18 15:57
2004.10.31
AI


4-1096000894
snake1977
2004-09-24 08:41
2004.10.31
Контекстное меню для каталога


3-1096542219
Брат
2004-09-30 15:03
2004.10.31
Показ Memo-поля в DBGrid


1-1098072922
md5 hash
2004-10-18 08:15
2004.10.31
Объекты в StringGrid


14-1097674190
Cosinus
2004-10-13 17:29
2004.10.31
Господа, не подскажите, где можно файл выложить на время>=30 дней