Форум: "Потрепаться";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.048 c