Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-1096909424
Knight
2004-10-04 21:03
2004.10.31
Какая машина самая универсальная для российских дорог?


1-1097589504
sten
2004-10-12 17:58
2004.10.31
read only для combobox


1-1097732773
denis24
2004-10-14 09:46
2004.10.31
большие кнопки и иконки на них


9-1088730599
Xerx
2004-07-02 05:09
2004.10.31
А какая тут тема?


1-1097944789
ИМХО
2004-10-16 20:39
2004.10.31
Текстовый файл огромного размера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский