Lazarus
Programming => Operating Systems => Windows => Topic started by: Lazarususer6789 on May 02, 2010, 03:09:01 pm
-
I want to know what The Lazarus equivalent of vb6 clicking
Project > components >Browse >"using common dialog to get ocx or dll" >ok >click the new icon on the left draw a box with cursor and Its done
i don't care if i have to get some dll's as long as they not ie dlls
i need it to work on all 32 bit windows os after windows 95 except windows vista and 7 if your method not work in vista like 99.9% of everything
I want to
.insert an ocx Active X into a form
.edit size with code (if the form resizes the activex will also resize)
.i want to make an exe that looks for an ocx in the same folder insted of the clsid in the registry like in vb where it has this code
classid="CLSID:920DFF5F-2EE6-4867-93A5-7BCF15B0F1C2"
id=Activex2
Filename="Activex1.ocx"
In the vb exe if the ocx is not registered or not there it uses ocx in app.path
So basically i want to use activex in Lazarus the same way i use it in vb5/6
Like this i want to make something like this In Lazarus
_______________
|_Form______|X|
| _________ |
| | Active X | |
| | Here | |
| |________| |
|_____________|
-
OK
-
Using OCX controls with Lazarus is not a well established technology and not recommended for a beginner. It still needs to be researched as far as I know and therefore should require considerable work to get working.
On the other hand you have to consider that OCX controls are both obsolete (VB 6 is also obsolete) and Windows only. Also consider that there are lot's of existing components for Lazarus which are cross-platform, so it's better to ask how to achieve the functionality that the OCX control would provide.
-
I think there is no easy answer for this problem, it is a complex program that you are trying to create. You have to start reading the OCX documentation from Microsoft and search for what is necessary to achieve this.
-
On the other hand you have to consider that OCX controls are both obsolete (VB 6 is also obsolete) and Windows only. Also consider that there are lot's of existing components for Lazarus which are cross-platform, so it's better to ask how to achieve the functionality that the OCX control would provide.
If they are obsolete then what is the replacement for them?
Actually, the argument that something is Windows only is a bit annoying. ;D After all there are a lot of things that are platform specific and they are handled by the Lazarus.
Personally I think that ActiveX is a nice technology and in the spirit of RAD. Just an example from the real life:
Few weeks ago I've received a scales (I do not know if it's a correct english word - by "scales" I mean device to measure weight) which I need to program. Each measurment needed to be store in database. Without an ActiveX control which provides me GUI and events out of the box I would have to write own wrapper for the dll, own GUI and I would need to test it. How long would it take? For me few hours probably. How long it took me with already premade control? Few mintes - it was trivial.
Just my thoughts... :)
-
No one has made more Windows features obsolete than Microsoft. This addiction to making code non portable even between the many Microsoft platforms is in part the encouragement for alternative solutions like Lazarus. Much work is done in Lazarus to mediate the penchant for Microsoft to make portability insecure. Lazarus is probably more portable across Microsoft platforms than anything from Microsoft.It is a bit of an imposition to expect ocx support in Lazarus considering Microsoft is applauding its extinction. With Microsoft Os releases you get to learn a new way to do the same thing. With Lazarus to get to do the same thing on the new OS without having to re-learn it.
-
It is a bit of an imposition to expect ocx support in Lazarus considering Microsoft is applauding its extinction.
I do not impose to anyone anything. I am not expecting anything from people who are doing something for free. However, I think that the statement about OCX obsolation is untrue.
I was searching on google any information regarding this issue and haven't found a single article saying that ocx is dying.
For example: http://msdn.microsoft.com/en-us/library/aa751968%28v=VS.85%29.aspx.
I think Microsoft would mention it as it does in its articles.
So where did you read about this?
-
How do i put an Active X ocx into a lazarus :-) :-\
Is your project commercial?
-
Reporting your question on different boards won't give you more answers. Please stay on one topic
-
Is there any method of using an Active X (OCX) in Lazarus forms?
-
I think that using COM Automation is a way of using ActiveX non-visual controls:
http://wiki.lazarus.freepascal.org/Office_Automation#Using_COM_Automation_to_interact_with_OpenOffice_and_Microsoft_Office
For using visual controls, did you already find, download and read ActiveX documentation as previously suggested?
-
I learned that a program wit Active X uses this info
File name Example "Activex1.ocx"
class id Example "920DFF5F-2EE6-4867-93A5-7BCF15B0F1C2"
what the control inside the ocx is called Example "Activexctl2"
My problem is how do i put this into lazarus
Do i use code or is there a menu?
-
There is no menu.
In Wikipedia you can read some more:
http://en.wikipedia.org/wiki/ActiveX
And there is a link to the source code of a simple ActiveX control in C++, which may also help understand how they work:
http://git.webvm.net/?p=afxsimple;a=tree
And here this C++ code could possibly load an ActiveX by code, although I am not 100% sure:
http://www.codersource.net/mfc/activex-com-dcom/custom-activex-control-in-mfc.aspx
And here an interresting discussion on the subject:
http://us.generation-nt.com/dynamically-loading-an-activex-com-dll-help-25478632.html
I have already said before that what you are trying to achieve isn't easy, so don't expect anyone to show a magic easy way. You will have to research a lot to achieve what you want.
-
If they are obsolete then what is the replacement for them?
ActiveX was a solution for cross-language and cross-technology objects and visual controls.
There is no replacement because the current trend by Microsoft and Apple as well is preventing cross-technology solutions. Microsoft would recommend that you drop all your current code completely and move to .NET instead.
Personally I think that ActiveX is a nice technology and in the spirit of RAD. Just an example from the real life:
Sure, but I was trying to give a working solution to the question.
-
I was hoping somebody had made a menu that puts an Active X in the form
Any Way
i was searching in the Lazarus folder and found
C:\lazarus\fpc\2.0.4\units\i386-win32\winunits\activex.o
C:\lazarus\fpc\2.0.4\units\i386-win32\winunits\activex.ppu
C:\lazarus\fpc\2.0.4\units\i386-win32\winunits\libpactivex.a
C:\lazarus\fpc\2.0.4\source\packages\extra\winunits\activex.pp
I think they are what i am looking for but have no idea how to use them
I am new to lazarus so i dont know how to put into project or how to use them
if anyone knows how to use them how do i make this
_______________
|_Form______|X|
| _________ |
| | Active X | |
| | Here | |
| |________| |
|_____________|
i have found an Active x ocx here http://ff24eva.0adz.com/vbp.7z
-
I also search hours for some solution...
and finally I found it here: author Ludo Brands
http://comments.gmane.org/gmane.comp.ide.lazarus.general/52310
or also:
http://lists.lazarus.freepascal.org/pipermail/lazarus/2011-May/063491.html
hope it helps
type
PIUnknown=^IUnknown;
TAtlAxAttachControl = function(Control:IUnknown; hwind:hwnd;ppUnkContainer:PIUnknown): HRESULT; stdcall;
IEventIntfEvents = dispinterface
['{EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B}']
end;
procedure TForm1.FormCreate(Sender: TObject);
var
atl:hmodule;
AtlAxAttachControl:TAtlAxAttachControl;
WebBrower:variant;
begin
atl:=LoadLibrary('atl.dll');
AtlAxAttachControl:=TAtlAxAttachControl(GetProcAddress(atl, 'AtlAxAttachControl'));
WebBrower:=CreateOleObject('Shell.Explorer');
AtlAxAttachControl(WebBrower,panel1.Handle,nil);
WebBrower.GoHome;
end;
cheers
-
Wow. Finally!
-
http://www.nohl.eu/tech-resources/using-typelibs-with-freepascal/
idl2pas works well on freepascal 2.5 or above
1 use sdk's oleview to view typelib (in ocx,dll or tlb) , copy and save the idl to textfile
2 use idl2pas to generate pas files
3 add pas file to lazarus project....
the attachments file is a lazarus project which use tracetool 12.4's avtivex lib
I use
http://svn.freepascal.org/svn/fpc/branches/fixes_2_6
Revision: 19871
and
lazarus
http://svn.freepascal.org/svn/lazarus/branches/fixes_0_9_30
Revision: 34261
http://www.codeproject.com/KB/trace/tracetool.aspx (http://www.codeproject.com/KB/trace/tracetool.aspx)
http://sourceforge.net/projects/tracetool/ (http://sourceforge.net/projects/tracetool/)
freepascal can not compile the delphi version of tracetool sometimes ago
,then use the activex lib
-
type
PIUnknown=^IUnknown;
TAtlAxAttachControl = function(Control:IUnknown; hwind:hwnd;ppUnkContainer:PIUnknown): HRESULT; stdcall;
IEventIntfEvents = dispinterface
['{EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B}']
end;
procedure TForm1.FormCreate(Sender: TObject);
var
atl:hmodule;
AtlAxAttachControl:TAtlAxAttachControl;
WebBrower:variant;
begin
atl:=LoadLibrary('atl.dll');
AtlAxAttachControl:=TAtlAxAttachControl(GetProcAddress(atl, 'AtlAxAttachControl'));
WebBrower:=CreateOleObject('Shell.Explorer');
AtlAxAttachControl(WebBrower,panel1.Handle,nil);
WebBrower.GoHome;
end;
This is looking great, because it potentially allows me to modify at least 3 of my Delphi (Windows web) applications to work in Lazarus.
So I tried this exact code with Delphi2006 and it worked in my tests & computers. So I decided to test it further and added the code. But now I have received feedback. Previously working application fails to start in Windows7 64-bit after adding the code. (This is strange, because I have this system too and it works fine)
Error message:
"The version of this file is not compatible with the version of Windows you're running. Check your computer's system information to see whether you need an x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher."
I gave another version & another download link, but same problem. I replaced atl code with TOlecontainer. That solved the problem for the user.
Any idea what could be the problem? User just happens to have broken system?
-
"The version of this file is not compatible with the version of Windows you're running. Check your computer's system information to see whether you need an x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher."
Hi! This message seems to be related to 64 bits OS but it's strange in your case. I think ActiveX is not completely tested in Lazarus, event if we can do some interesting things.
For me, I'm trying to use this code but the problem is that the control flickers a lot when I resize.
I tried DoubleBuffered := true;
Without success.
I tried to call SetWindowLong with a WS_CLIPCHILDREN style, as seen in another other forum when ATL is used, but it has no effect.
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) or WS_CLIPCHILDREN or WS_CLIPSIBLINGS);
Is there any other possibility? Thanks if someone has a trick.
-
In the latest fpc/lazarus from svn you'll find the new lazactivex package which doesn't rely on external atl libraries anymore and is fully integrated in lazarus. http://wiki.freepascal.org/LazActiveX
-
Thanks for reply.
I tried to install the latest daily build (Lazarus 1.1), when I check LazActiveX in packages, and try to rebuild it, I get an error about a unit (don't remember). Perhaps this is because I installed the version over an existing installation of Lazarus? I'm not on the test computer today, but will try again tomorrow. If it's integrated, it's great but using the ATL method is also interesting.
But the good news is that Lazarus is moving towards a true alternative to Delphi, even in Windows platform.
-
You need also fpc from svn. 2.6.1 fixes is fine but 2.7.1 has some fixes not back ported to 2.6.1 yet, I believe.
-
There is no build with FPC 2.7.1 on this page : http://freepascal.dfmk.hu/test/lazarus/
Instead of breaking everything, I prefer to wait a little more until the next version is finished.
-
You can use the one with 2.6.1. I just checked and the relevant 2.7.1 fixes where merged in a week ago.
-
This is great.
Does anyone know how to use events (like DocumentComplete) with this kind of IE control ?
Is there any way to read HTML content of an loaded web page (to put it in simple Memo) ?
Thx
-
Is there any way to read HTML content of an loaded web page (to put it in simple Memo) ?
I don't think so. Document sources are parsed in objects (DOM) and you can access these but afaik not the original sources. The source of a page is in many cases several html documents and sometimes a lot of html added and/or modified by scripts.
-
The source of a page is in many cases several html documents and sometimes a lot of html added and/or modified by scripts.
Yes and this is OK.
Document sources are parsed in objects (DOM) and you can access these ...
How ?
In Delphi I used :
var Doc: IHTMLDocument2;
WebForm: IHTMLFormElement;
FormElements: OleVariant;
.....
Doc := WebBrowser.Document as IHTMLDocument2;
WebForm := Doc.Forms.Item(0,'') as IHTMLFormElement;
FormElements := WebForm.Elements;
Memo1.Lines.Text := WebBrowser.OleObject.Document.documentElement.innerText;
How can it be made in Lazarus ?
-
In Delphi I used :
...
How can it be made in Lazarus ?
The same ;) But in order to do this you should also add the full mshtml typelib. Import the typelib from C:\WINDOWS\system32\mshtml.tlb and add the created MSHTML_4_0_TLB (75000 lines!) to your uses clause.
I extended the code used on the wiki a bit and added a tmemo and a second tbutton:
uses ..., MSHTML_4_0_TLB;
...
procedure TForm1.Button2Click(Sender: TObject);
var Doc: IHTMLDocument2;
begin
Doc := Browser.ComServer.Document as IHTMLDocument2;
Memo1.Lines.Text := utf8encode(Doc.parentWindow.document.Get_body.innerHTML);
end;
This shows the contents of the <body> tag.
-
Today I tested the daily build installing in another directory. When I started it, I correctly configured the paths.
The LazActiveX module was checked and the Lazarus IDE compiled without problems, but any applications that I started with it trowed a SIGILL on start. I don't know the exact cause.
For my flickering problem, I searched a bit in the constants, this is the solution :
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) or WS_CLIPCHILDREN or WS_CLIPSIBLINGS);
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);
Adding this in the FormCreate event will make the window resize smoothly.
Maybe this could be interesting to solve other flickering problems.
-
Thank you ludob , everything is working like it has to bee.
This is 100% substitute for Delphi TWebBrowser (on windows of course).
-
Today I tested the daily build installing in another directory. When I started it, I correctly configured the paths.
The LazActiveX module was checked and the Lazarus IDE compiled without problems, but any applications that I started with it trowed a SIGILL on start. I don't know the exact cause.
Do you mean that even a new application (empty form) would crash?
-
Yes.
On the Lazarus release, the application starts with a SIGSEGV but can continue. Maybe it's my test computer. I should clean everything and install only the testbuild to see.
-
Thanks for update. This seems much better than using atl.
My Delphi soft uses InternetSecurityManager interface http://msdn.microsoft.com/en-us/library/ms537130(v=vs.85).aspx to block javascript from specified urls. I implemented that to shell.explorer, I can add small sample, if anyone interrested.
-
Is there any way to use this ActiveX http://wiki.freepascal.org/LazActiveX#TActiveXContainer_early_binding (http://wiki.freepascal.org/LazActiveX#TActiveXContainer_early_binding) for WinCE (WM 6.5 - WebBrowser) ?
-
Here is two pieces of code, maybe useful to someone else too?!
Need to drop activexcontainer1, edit1, and button1 to form and assign formshow and button1click events.
InternetSecurityManager, ProcessUrlAction: Every action is disallowed, if url contains word "google". (You should notice google autocomplete is disabled)
********
IDocHostUIHandler and CoInternetSetFeatureEnabled
Function TranslateUrl: Try navigate to "google", it goes to http://lazarus.freepascal.org
CoInternetSetFeatureEnabled: Navigation sounds are disabled.
-
No one has made more Windows features obsolete than Microsoft. This addiction to making code non portable even between the many Microsoft platforms is in part the encouragement for alternative solutions like Lazarus.
I know this is a 6 year old post however, can you give some examples of what Microsoft has made obsolete and encouraged to be obsolete? Microsoft is well known for purposely making 10 year old software work on their platforms, they even went in and modified the operating system to work around bugs that other developers created who have nothing to do with microsoft (third party apps).
The whole blog, titled "Old New Thing" describes all the efforts Microsoft has made to make old things work on new things.. (hence blog title)
Quote From Joel Spolsky:
"The Old New Thing is chock-full of detailed technical stories about why certain things are the way they are in Windows, even silly things, which turn out to have very good reasons.
The most impressive things to read on Raymond's weblog are the stories of the incredible efforts the Windows team has made over the years to support backwards compatibility:
I first heard about this from one of the developers of the hit game SimCity, who told me that there was a critical bug in his application: it used memory right after freeing it, a major no-no"...
..."The testers on the Windows team were going through various popular applications, testing them to make sure they worked OK, but SimCity kept crashing. They reported this to the Windows developers, who disassembled SimCity, stepped through it in a debugger, found the bug, and added special code that checked if SimCity was running, and if it did, ran the memory allocator in a special mode in which you could still use memory after freeing it."
Much work is done in Lazarus to mediate the penchant for Microsoft to make portability insecure.
One thing I can think of that Microsoft made non portable is old Visual Basic IDE which is no longer in use and people have to change over to .Net. But if Microsoft really wanted to tick off developers, it would make the Win32 API obsolete, which people still use now... over 20 years later after it was originally developed. To have an API like win32 last 20 years, and people still create brand new projects using the winapi 20 years later... is pretty impressive with today's throwaway software attitude.
Complaining about microsoft is easy... but look at all the things that break with apt-get debian or other unix issues. It's easier to complain about one system, and ignore the problems of your own system. As an example, MacOSX is no better... they made all their old MacOS apps incompatible with the newer OSX. Easier said than done, to make things all backwards compatible. Sometimes a fresh start is best... Such as deleting all unix and windows systems off the planet and creating a good OS from scratch. Plan9 tried, and failed...