Solved

ICONWRKS under VB4

Posted on 1997-04-29
9
237 Views
Last Modified: 2006-11-17

(also posted to comp.lang.basic.visual.misc)

I'm having trouble getting ICONWRKS to work properly under VB4.0 (16-bit) either with Win3.1 or Win95.  I know that VB 4.0 has some advanced graphics capabilities over VB 3.0 (which is where ICONWRKS came from) but I'm using ICONWRKS to understand API programming as described in Appleman's "Visual Basic Programmer's Guide to the Windows 3.1 API.

A friend of mine still has VB3.0 and ICONWRKS works fine both under Win3.1 and Win95.

I've noticed that after fixing a few initial VB3.0 -to- VB4.0 style bugs
that the programs runs enough to allow me to edit in the pic_edit
picture box (that's the one the user sees) but when the pic_edit_mouse_up event occurs, the copy of the current icon over in the status area doesn't update.  This copy of the icon is what gets saved to a file using the SavePicture statement.  My problem is that none of my edits make it to the file (whatever.ICO)

I've traced through the program after pic_edit_mouse_up and have come to a critical point with the update_icon subroutine. First I noticed that the source code used integers for the GetBitmapBits
function return when the (Win 3.1) API calls for long.  Also they pass numeric constants without enforcing integer vs. long but I guess VB takes care of that.

They copy bits from the pic_image and pic_mask to pic_icons(currentIcon) by BitBlt-ing the monochrome mask bits through a compatible memory device context (monohdc) and GetBitmapBits & GlobalLock to copy them to pic_icon(currentIcon).picture_base_address+12.  The image bits are copied by GetBitmapBits from pic_image.image to
pic_icons(currentIcon).picture + 12 + 128.  Then they force a paint event on pic_icons(currentIcon).  This all works under 3.0 (even with improper API function return types) but not for my case.

Since the problem moves with VB version and is independent of Win3.1 vs. Win95 could there have been a change in internal graphics controls' memory layout from 3.0 to 4.0?  Is the internal structure of .picture and .image detailed anywhere?

Did I miss a release notes file?  Should I be taking a different diagnosis track?

I have pro edition.  I have not looked into the CDK.

Thanks for any and all help,

--
Jeff Cooper
Digital Equipment Corp
Networks Engineering
Jeff.Cooper@xsw.lkg.dec.com
0
Comment
Question by:coop050498
9 Comments
 

Expert Comment

by:franswen
ID: 1425809
This is not much of a solution, only a gesture and comforting. I'm stuck with exactly the same problem, started with trying Iconworks to work in VB4.
As far as I dug in it is a matter of changing one or to DLL's.
It is the GetBitmapBits or GlobalLock where the original code tumbles and puts the machine into a Sodom and Gamorra like still.
I think you can erase the 200 points upto 1000, because to my opinion nobody seems to know.
0
 

Author Comment

by:coop050498
ID: 1425810
Edited text of question
0
 

Author Comment

by:coop050498
ID: 1425811
Adjusted points to 295
0
Are your AD admin tools letting you down?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

 
LVL 3

Expert Comment

by:mheacock
ID: 1425812
IconWrks was originally designed for VB 3.0...was it not?

It is reasonable to assume that it might now be compatible with
VB 4.0.  I know that Micrsoft changed its Variant record type
dramtically between the releases, therefore DLLs that relied on
the old format no longer work with the new format.  It is
reasonable to expect that MS made other substantial changes.
And like MS, they don't publicize these changes too loudly...
you're forced to find them out the hard way, then search for
the docs later.

I'd e-mail the makers of IconWrks and see what kind of solutions
they have for you and see if they have a VB 4.0 compatible
version you can get a hold of.

0
 

Author Comment

by:coop050498
ID: 1425813
I don't believe variant datatypes are involved.
0
 

Author Comment

by:coop050498
ID: 1425814
Adjusted points to 355
0
 
LVL 5

Accepted Solution

by:
y96andha earned 350 total points
ID: 1425815
I think that the problem has to do with string format changed between VB4 and VB3. Strings stored in memory occupy two bytes per character in VB4 whereas they occupied one byte in VB3. Try changing string declarations in the structures to byte declarations.
0
 

Author Comment

by:coop050498
ID: 1425816
I DO NOT ACCEPT THIS ANSWER.  Seems to me nobody who really understands VB beyond a surface level is attempting to answer this question.  I'm not getting a chance to grade this answer but I grade it an F.

0
 
LVL 5

Expert Comment

by:y96andha
ID: 1425817
Sorry to hear that. I just saw your question and got to think about my trouble declaring structures for API calls until I noticed that.
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library a…
When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

773 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question