FYI, Semoga bermanfaat.
Vavai
-----Original Message-----
From: Rod Stephens <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Date: Tue, 5 Jul 2005 05:41:29 +0000
Subject: VB6 Helper Newsletter
Have a great week and thanks for subscribing!
Rod
[EMAIL PROTECTED]
==========
VB6 Contents:
1. New HowTo: Find the text displayed by a Window's descendant given its
hierarchical window path
2. Updated HowTo: See what URL Internet Explorer is displaying
3. New HowTo: Get information about a Window's child hierarchy from its
hWnd
4. New HowTo: Save an ADO Recordset's data into an XML file
5. New HowTo: Connect an ADO Recordset to an XML file located at a URL
6. Updated Tip: VB 6 Coding Style
Both Contents:
7. New Links
8. Karen Watterson's Weekly Destinations and Diversions (D & D)
==========
++++++++++
<VB6>
++++++++++
==========
1. New HowTo: Find the text displayed by a Window's descendant given its
hierarchical window path
http://www.vb-helper.com/howto_find_window_path_text.html
http://www.vb-helper.com/HowTo/howto_find_window_path_text.zip
Enter a target string and a window class path. The program searches for
a window with title containing the target string. It then searches the
window's child hierarchy to find a window that matches the specified
class path. It displays the text contained by that child window.
The program uses the EnumWindows API function to look for a window with
title containing the target text. When it finds one, it calls
FollowChildPath to get the desired child window's text.
Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long)
As Boolean
Dim buf As String * 1024
Dim title As String
Dim length As Long
Dim txt As String
' Get the window's title.
length = GetWindowText(app_hwnd, buf, Len(buf))
title = Left$(buf, length)
' See if the title contains the target text.
If InStr(title, g_Contains) > 0 Then
' This is the target. Search for the desired path.
If FollowChildPath(txt, app_hwnd,
LCase$("IEFrame/WorkerA/ReBarWindow32/ComboBoxEx32/ComboBox/Edit/"))
Then
frmWindowList.txtAddress.Text = txt
Else
frmWindowList.txtAddress.Text = "<not found>"
End If
' Stop searching.
EnumProc = 0
Else
' Continue searching until we find it.
EnumProc = 1
End If
End Function
Function FollowChildPath follows a path of child classes starting from a
specified parent window. For example, the path
IEFrame/WorkerA/ReBarWindow32 looks for an IEFrame child, that has a
WorkerA child, that has a ReBarWindow32 child. The path to find an
Internet Explorer address is:
IEFrame/WorkerA/ReBarWindow32/ComboBoxEx32/ComboBox/Edit
Function FollowChildPath finds the current window's class and verifies
that its current path matches the target path so far. If the current and
target paths match completely, then the function is done so it calls
function WindowText to get the window's text value and stops searching.
If the current path matches the target path so far but is not finished,
the function lists the window's children. It then calls itself
recursively to search the children for the target path.
' Search this window's children for the specified path.
' If we find the path, return the final window's text
' through parameter window_text and return True.
Public Function FollowChildPath(ByRef window_text As String, ByVal
window_hwnd As Long, ByVal target_path As String, Optional ByVal
current_path As String = "") As Boolean
Dim txt As String
Dim buf As String
Dim buflen As Long
Dim child_hwnd As Long
Dim children() As Long
Dim num_children As Integer
Dim i As Integer
' Assume we will not find the target path.
FollowChildPath = False
' Get the class name.
buflen = 256
buf = Space$(buflen - 1)
buflen = GetClassName(window_hwnd, buf, buflen)
buf = Left$(buf, buflen)
' Add the class name to the current path.
current_path = current_path & LCase$(buf) & "/"
' See if we're on the right track.
If Left$(target_path, Len(current_path)) <> current_path Then
' We are off the path. Don't search it.
ElseIf target_path = current_path Then
' We are on the path and have reached the end.
' Set the window's text and stop searching.
If buf = "Edit" Then
window_text = WindowText(window_hwnd)
Else
window_text = "<not an Edit window>"
End If
FollowChildPath = True
Else
' We are on the path but have not reached the end.
' Make a list of the child windows.
num_children = 0
child_hwnd = GetWindow(window_hwnd, GW_CHILD)
Do While child_hwnd <> 0
num_children = num_children + 1
ReDim Preserve children(1 To num_children)
children(num_children) = child_hwnd
child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT)
Loop
' Search the child windows.
For i = 1 To num_children
If FollowChildPath(window_text, children(i), target_path,
current_path) Then
' We found the result. Stop searching.
FollowChildPath = True
Exit For
End If
Next i
End If
End Function
Function WindowText uses the SendMessage API function to return a
window's text.
' Return the text associated with the window.
Public Function WindowText(window_hwnd As Long) As String
Dim txtlen As Long
Dim txt As String
WindowText = ""
If window_hwnd = 0 Then Exit Function
txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)
If txtlen = 0 Then Exit Function
txtlen = txtlen + 1
txt = Space$(txtlen)
txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal txt)
WindowText = Left$(txt, txtlen)
End Function
==========
2. Updated HowTo: See what URL Internet Explorer is displaying
http://www.vb-helper.com/howto_find_ie_address.html
http://www.vb-helper.com/HowTo/howto_find_ie_address.zip
Use the EnumWindows and GetWindowText API functions to look for a window
with title ending in " - Microsoft Internet Explorer".
Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long)
As Boolean
Dim buf As String * 1024
Dim title As String
Dim length As Long
Dim txt As String
' Get the window's title.
length = GetWindowText(app_hwnd, buf, Len(buf))
title = Left$(buf, length)
' See if the title contains the target text.
If InStr(title, g_Contains) > 0 Then
' This is the target. Search for the desired path.
If FollowChildPath(txt, app_hwnd,
LCase$("IEFrame/WorkerA/ReBarWindow32/ComboBoxEx32/ComboBox/Edit/"))
Then
frmWindowList.txtAddress.Text = txt
Else
frmWindowList.txtAddress.Text = "<not found>"
End If
' Stop searching.
EnumProc = 0
Else
' Continue searching until we find it.
EnumProc = 1
End If
End Function
Function FollowChildPath follows a path of child classes starting from a
specified parent window. For example, the path
IEFrame/WorkerA/ReBarWindow32 looks for an IEFrame child, that has a
WorkerA child, that has a ReBarWindow32 child. The path to find an
Internet Explorer address is:
IEFrame/WorkerA/ReBarWindow32/ComboBoxEx32/ComboBox/Edit
Function FollowChildPath finds the current window's class and verifies
that its current path matches the target path so far. If the current and
target paths match completely, then the function is done so it calls
function WindowText to get the window's text value and stops searching.
If the current path matches the target path so far but is not finished,
the function lists the window's children. It then calls itself
recursively to search the children for the target path.
' Search this window's children for the specified path.
' If we find the path, return the final window's text
' through parameter window_text and return True.
Public Function FollowChildPath(ByRef window_text As String, ByVal
window_hwnd As Long, ByVal target_path As String, Optional ByVal
current_path As String = "") As Boolean
Dim txt As String
Dim buf As String
Dim buflen As Long
Dim child_hwnd As Long
Dim children() As Long
Dim num_children As Integer
Dim i As Integer
' Assume we will not find the target path.
FollowChildPath = False
' Get the class name.
buflen = 256
buf = Space$(buflen - 1)
buflen = GetClassName(window_hwnd, buf, buflen)
buf = Left$(buf, buflen)
' Add the class name to the current path.
current_path = current_path & LCase$(buf) & "/"
' See if we're on the right track.
If Left$(target_path, Len(current_path)) <> current_path Then
' We are off the path. Don't search it.
ElseIf target_path = current_path Then
' We are on the path and have reached the end.
' Set the window's text and stop searching.
If buf = "Edit" Then
window_text = WindowText(window_hwnd)
Else
window_text = "<not an Edit window>"
End If
FollowChildPath = True
Else
' We are on the path but have not reached the end.
' Make a list of the child windows.
num_children = 0
child_hwnd = GetWindow(window_hwnd, GW_CHILD)
Do While child_hwnd <> 0
num_children = num_children + 1
ReDim Preserve children(1 To num_children)
children(num_children) = child_hwnd
child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT)
Loop
' Search the child windows.
For i = 1 To num_children
If FollowChildPath(window_text, children(i), target_path,
current_path) Then
' We found the result. Stop searching.
FollowChildPath = True
Exit For
End If
Next i
End If
End Function
Function WindowText uses the SendMessage API function to return a
window's text.
' Return the text associated with the window.
Public Function WindowText(window_hwnd As Long) As String
Dim txtlen As Long
Dim txt As String
WindowText = ""
If window_hwnd = 0 Then Exit Function
txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)
If txtlen = 0 Then Exit Function
txtlen = txtlen + 1
txt = Space$(txtlen)
txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal txt)
WindowText = Left$(txt, txtlen)
End Function
==========
3. New HowTo: Get information about a Window's child hierarchy from its
hWnd
http://www.vb-helper.com/howto_find_window_hierarchy_info.html
http://www.vb-helper.com/HowTo/howto_find_window_hierarchy_info.zip
This program gets information about the classes that make up a root
window with a title containing some target text. For example, you can
look for a form with a title containing the text "Notepad."
When you enter the text to find and click the Find Windows button, the
program saves the target text in the global variable g_Contains and then
calls the EnumWindows API function to enumerate the system's windows.
' Start the enumeration.
Private Sub cmdFindWindows_Click()
g_Contains = txtContains.Text
EnumWindows AddressOf EnumProc, 0
End Sub
Subroutine EnumProc examines the windows. It uses the GetWindowText API
function to get the window's title and uses InStr to see if the title
contains the target text. If it does, the routine uses function
GetWindowStructure to get information about the window's children.
Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long)
As Boolean
Dim buf As String * 1024
Dim title As String
Dim length As Long
Dim txt As String
' Get the window's title.
length = GetWindowText(app_hwnd, buf, Len(buf))
title = Left$(buf, length)
' See if the title contains the target text.
If InStr(title, g_Contains) > 0 Then
' Display the window's structure.
frmWindowList.txtResults.Text = GetWindowStructure(app_hwnd)
' Stop searching.
EnumProc = 0
Else
' Continue searching til find it.
EnumProc = 1
End If
End Function
Function GetWindowStructure uses the GetClassName API function to get
the window's class name. If the class is Edit, then it also calls
function WindowText to get the text the window is displaying.
The function then makes a list of the window's children and recursively
calls itself for each.
' Search this window and display information about its children.
Public Function GetWindowStructure(window_hwnd As Long, Optional ByVal
Indent As String = "") As String
Dim txt As String
Dim buf As String
Dim buflen As Long
Dim child_hwnd As Long
Dim children() As Long
Dim num_children As Integer
Dim i As Integer
' Get the class name.
buflen = 256
buf = Space$(buflen - 1)
buflen = GetClassName(window_hwnd, buf, buflen)
buf = Left$(buf, buflen)
' Display the window's class.
txt = Indent & buf
' See if we found an Edit object.
If buf = "Edit" Then txt = txt & " (" & WindowText(window_hwnd) &
")"
txt = txt & vbCrLf
' Search the children.
' Make a list of the child windows.
num_children = 0
child_hwnd = GetWindow(window_hwnd, GW_CHILD)
Do While child_hwnd <> 0
num_children = num_children + 1
ReDim Preserve children(1 To num_children)
children(num_children) = child_hwnd
child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT)
Loop
' Get information on the child windows.
For i = 1 To num_children
txt = txt & GetWindowStructure(children(i), Indent & " ")
Next i
GetWindowStructure = txt
End Function
Function WindowText uses the SendMessage API function to get a window's
text.
Public Function WindowText(window_hwnd As Long) As String
Dim txtlen As Long
Dim txt As String
WindowText = ""
If window_hwnd = 0 Then Exit Function
txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)
If txtlen = 0 Then Exit Function
txtlen = txtlen + 1
txt = Space$(txtlen)
txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal txt)
WindowText = Left$(txt, txtlen)
End Function
==========
4. New HowTo: Save an ADO Recordset's data into an XML file
http://www.vb-helper.com/howto_recordset_to_xml.html
http://www.vb-helper.com/HowTo/howto_recordset_to_xml.zip
Thanks to James Hansen ([EMAIL PROTECTED]).
When you click the "Make XML File" button, the program uses the
following code to make such an XML file. It opens an ADO Recordset
connected to a normal Access database file. It then creates an XML
DOMDocument object and calls the Recordset's Save method, passing it the
DOMDocument to save the Recordset's data into the document. It then
calls the DOMDocument object's Save method to write the document's XML
data into a file.
Private Sub cmdMakeXmlFile_Click()
Dim db_name As String
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim dom_document As DOMDocument
' Get the database's name.
db_name = txtDatabase.Text
' Open the connection.
Set conn = New ADODB.Connection
conn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Persist Security Info=False;" & _
"Data Source=" & db_name
conn.Open
' Open the Recordset.
Set rs = conn.Execute("SELECT * FROM Books ORDER BY Title")
' Save the data into a DOMDocument.
Set dom_document = New DOMDocument
rs.Save dom_document, adPersistXML
rs.Close
conn.Close
' Save the XML data into an XML file.
db_name = Replace$(db_name, ".mdb", ".xml")
dom_document.Save db_name
MsgBox "Now move the XML file to a HTTP site."
End Sub
See also the following example.
For information on using XML in Visual Basic .NET, see my book <A
HREF="http://www.vb-helper.com/xml.htm">Visual Basic .NET and XML</A>.
==========
5. New HowTo: Connect an ADO Recordset to an XML file located at a URL
http://www.vb-helper.com/howto_url_recordset.html
http://www.vb-helper.com/HowTo/howto_url_recordset.zip
Thanks to James Hansen ([EMAIL PROTECTED]).
First, create an XML file containing the data in ADO's saved XML format.
(See the previous example.)
After you create the XML file, copy it to your Web server. (For testing
purposes, you can also connect to the document on your file system.)
Then when you click the "Get XML Data" button, the program uses the
following code to read the XML data from the URL where you copied it. It
creates a Recordset and opens it, indicating the URL as the data source.
The program then loops through the Recordset, displaying its data.
Private Sub cmdGetXmlData_Click()
Dim rs As ADODB.Recordset
Dim i As Integer
Set rs = New ADODB.Recordset
rs.Open txtUrl.Text, "Provider=MSPersist;", _
adOpenStatic, adLockReadOnly
rs.MoveLast ' Can find little errors that can crop up.
rs.MoveFirst
Debug.Print "********************"
Do Until rs.EOF
For i = 0 To rs.Fields.Count - 1
Debug.Print rs.Fields(i) & " ";
Next i
Debug.Print
rs.MoveNext
Loop
rs.Close
MsgBox "Ok"
End Sub
Note that generally you will want to make the XML file read-only on your
Web server so people running such a program can read it but not midify
it.
For information on using XML in Visual Basic .NET, see my book <A
HREF="http://www.vb-helper.com/xml.htm">Visual Basic .NET and XML</A>.
==========
6. Updated Tip: VB 6 Coding Style
http://www.vb-helper.com/tip_vb6_coding_styles.html
(If you have other suggestions to add, email them to me at
[EMAIL PROTECTED])
WJK ([EMAIL PROTECTED]) had these additions. If the formatting is
messed up in your mail application, see the online version.
Here's some commented code by WJK showing some of his standards.
Private Sub DoesSomething(inString$, inInteger%)
Dim Integer%, String$
' I always use the variable types
' I know people disagree with this.
' I find it useful and better for me.
' Throughout the code I use the symbol.
' Always be aware of variable type.
' I do not use the variant variable type very often.
' In addition I use gVar to indicate Global Variables
' pVar to indicate module level public variables
' I always use txtTextBox, lblLabel, cbCheckbox
' etc. for controls
' An error statement is required at start of subroutine after Dim
' statement. Either format depending on subroutine, errs always
handled.
On Error Resume Next
On Error GoTo DoesSomething_Error
' Name of err statement is always:
' subroutine_name+_Error
...sub code here...
Exit Sub
DoesSomething_Error:
' Labels are always to the left. Try to limit goto labels to one
' per subroutine... Goto statement can usually be avoided.
' I have some global err handlers, but many subs use this format.
Select Case Err.Number
Case xxx ' This handles specific occurrences, I try to write
code to handle
' before error occurs, code executes faster when you
do this.
Case Else ' Always an else case for handling most err types.
End Select
Resume Next
End Sub
And here are some other tips by WJK.
* Always try to build a reusable subroutine to accomplish a given task.
Never write the same inline code over and over. This makes your code
easier to maintain and update (fix one, you fix all)
* I like the use of the : character only when used with a short if
statement:
IF A=B Then B=C : A=C
* The inline if statement can be of tremendous use.
* .Fields("Labor_Total_Cost") = Round((.Fields("Quantity") * _
* IIf(.Fields("Labor"), 1, 0) * .Fields("Labor_Unit_Price") * _
.Fields("THE_FACTOR") * Currency_Value * gCCI_Labr), 2)
The inline if statement can eliminate having many additional
intermediate variables. If it can be done without inline if
statements.... I do it that way.
* Working with record sets, I almost never use the notation:
recordset.fields(1) = xxxx
Instead I use:
recordset.fields("FieldName")= xxxx
It makes the code self documenting.
==========
++++++++++
<Both>
++++++++++
==========
7. New Links
http://www.vb-helper.com/links.html
SearchVB.com
http://searchvb.techtarget.com
Tons of news and information about VB topics: design, database
programming, XML, VBA, .NET, ActiveX, etc.
MSD2D.com
http://www.MSD2D.com/
VB .NET, C#, and ASP.NET tips, tutorials, etc. Includes message boards
and a .NET tutorials database.
==========
8. Karen Watterson's Weekly Destinations and Diversions (D & D)
http://www.vb-helper.com/karens_weekly_diversions.html
Readable/Watchable
- As always, start here
<http://msdn.microsoft.com/recent/default.aspx>. Then check out
gotdotnet.com's user samples
<http://www.gotdotnet.com/Community/UserSamples/>.
- John O'Byrne's article describing his TaskbarNotifier
<http://www.codeproject.com/cs/miscctrl/taskbarnotifier.asp>, a .NET
class which lets you display an MSN Messenger-like animated popup with a
skinned background.
- The July issue of Maximum PC has an awesome feature, The Ultimate
Do-It-Yourself Guide <http://www.maximumpc.com/this_month/> with 27
how-to do it yourself projects. The article on 64-bit Windows is also
worth the read.
- Read about the three dozen bugs affecting VB developers that were
fixed in SP6
<http://support.microsoft.com/default.aspx?scid=kb;en-us;834001>.
Download the SP
<http://msdn.microsoft.com/vstudio/downloads/updates/sp/>.
- Michael Brisset's Getting Started with Unit Test Generation
<http://blogs.msdn.com/vstsqualitytools/archive/2005/06/29/434027.aspx>
(in VSTS 2005).
Selected KB articles
- 328587 How to create a DTS custom task with VB.NET.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b328587>
- 891406 The IsMissing function may not work correctly when you
declare a function with a parameter that is both optional and of the
Variant data type in VB6.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b891406>
- 891748 How to authenticate the Inbox in Exchange Server 2003 with
forms-based authentication enabled with VB.NET.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b891748>
- 312839 How to send e-mail without using SQL Mail in SQL Server.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b312839>
- 328587 How to create a DTS custom task with VB.NET.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b328587>
- 870617 How to add or modify licenses in SQL Server 2000.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b870617>
- 322385 SQL Server support in a hyper-threaded environment.
<http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b322385>
Downloadable
- William Steele's source code for a Toast app
<http://www.wjsteele.com/clickonce.zip>. Related: info about the app
<http://blogs.msdn.com/wsteele/>.
- FileZilla <http://sourceforge.net/projects/filezilla/> - free FTP
client.
- XSDObjectGen
ails.aspx?FamilyID=89E6B1E5-F66C-4A4D-933B-46222BB01EB0&displaylang=en>.
Takes an XSD schema as input and generates sample code showing how to
mark up C# and VB.Net classes so that, when serialized with the XML
serializer, the resulting XML will be valid according to the original
schema.
- Text editor for Windows Mobile 2003
<http://www.microsoft.com/downloads/details.aspx?FamilyID=9A0C0EDE-601C-4
662-9839-BA8CD7B736D7&displaylang=en>.
- SnapFiles' Restoration utility
<http://www.snapfiles.com/get/restoration.html> - undelete from USB
devices, for example.
Browsable
- MVP Maarten Struys' DotNETForDevices.com site
<http://dotnetfordevices.com/>. Sign up for Maarten's newsletter,
download code snippets, etc. (You might also want to watch a replay of
his June 28 Webcast on issues involved with multithreading on mobile
devices.)
- Public Integrity <http://www.publicintegrity.org/> ("Investigative
Journalism in the Public Interest").
- MIL-STDs
<http://www.dscc.dla.mil/Programs/MilSpec/default.asp?DocTYPE=STD>.
- Jon Udell's excellent 11/22/04 blog entry on software factories
<http://weblog.infoworld.com/udell/2004/11/22.html> with tons of good
links, and a conversation with Ward Cunningham and Jack Greenfield.
- Wener Moise's blog - Musings on .NET, PDC, Technolgy,
Entrepreneurship and Life <http://wesnerm.blogs.com/net_undocumented/>.
- Snapfiles' freeware <http://www.snapfiles.com/Freeware/>.
- US Senate site <http://www.senate.gov/>. Related: Interview with
Richard Baker <http://www.q-and-a.org/Program/index.asp?ProgramID=1026>,
the US Senate Historian.
Travelable
- Comic-Con <http://www.comic-con.org/index.php>, July 14-17 in San
Diego.
- PDC05 <http://msdn.microsoft.com/events/pdc/>, Sept 13-16 in LA.
Heads Up
- Watch an architecture webcast, get a free book
<http://www.architecturewebcasts.com>.
- Sunset alert! In the July issue of "Maximum PC," Watch Dog reports
that Quicken only supports the current and past two versions online.
Microsoft Money offers two years online support. The remedy? Upgrade, of
cour$e.
Jargon Alert
- manwha - Korean version of manga.
- rapture theology - popularized by the popular "Left Behind" series
of novels by Tim La Haye.
- ROC - Return on Customer, according to Don Peppers and Martha
Rogers, in their latest book.
- ABI - Automated Broker Interface, Advanced Bus Interface,
Application Binary Interface, Adaptive Brain Interface.
- SPOMF
<http://www.cotsjournalonline.com/home/article.php?id=100330> -
Symmetric Phase Only Matched Filter (method for detecting a known object
in an image.)
- EPIC <http://www.epic-sbc.org/> - Embedded Platform for Industrial
Computing.
- poilu <http://en.wikipedia.org/wiki/Poilu> (hairy one) - French
equivalent of grunt.
Misc
- Interesting article on the rise of the creative class
<http://www.fastcompany.com/subscr/96/open_cof.html>. Dan Pink ("A Whole
New Mind" argues that the future will belong to creators and
empathizers, driven by abundance, Asia, and automation.
- The July issue of Fast Company
<http://www.fastcompany.com/subscr/96/open_boss.html> had several other
fascinating articles, including an interview with GE CEO Jeff Immelt and
a surprisingly interesting article on Cirque du Soleil (good sidebar by
Blue Ocean Strategy co-author Renee Mauborgne, on innovation). One of
Immelt's observations: management literature has focused on how to. "I
think we're now in the what-and-where generation." The July feature, "Is
your Boss a Psychopath," is interesting, too.
- Americans reportedly consume an average of 66 pounds of beef/year.
- The most popular cosmetic surgery for men is liposuction. Average
cost: $4117. Eyelid surgery, nose jobs, male breast reduction, and hair
transplantation round out the top five.
- Review of Dean Hamer's "God Gene." Recommended background music
<http://www.cyberhymnal.org/> (select autoplay).
- Pinnacle's July newsletters are all online now
<http://www.pinpub.com>, which means that even non-subscribers can read
the feature article of each newsletter free until next month's contents
are posted. So...that means you can read 1) Carl Ganz's feature on using
Office Web Components in VBD (Disclaimer - I'm the editor) 2) Pete
Rodriguez' "Roll Your Own Masked Edit Custom Control with ASP.NET" in
Visual Studio .NET Developer, 3) MVP Hilary Cotter's feature on what to
expect in SQL Server 2005's Full Text Search in SQL Server Professional
(I'm also the editor of SSPro), and 4) Paul Millennas' excellent Smart
Access article on adding color to otherwise "battleship grey" buttons in
Access.
- NY Times science articles <http://www.nytimes.com/pages/science/>.
- Crop, grass, vegetable, and weed seeds
<http://www.ca.uky.edu/agripedia/agmania/seedid/>.
- Photographic archive of Gary, Indiana, steel plant
<http://www.dlib.indiana.edu/collections/steel/>.
==========
Archives:
http://www.topica.com/lists/VBHelper
http://www.topica.com/lists/VB6Helper
http://www.topica.com/lists/VBNetHelper
http://www.vb-helper.com/cgi-bin/mojo/mojo.cgi?flavor=archive&list=VB_Hel
per_Newsletter
Post questions at:
http://www.topica.com/lists/VBHelperQA
--^----------------------------------------------------------------
Untuk keluar dari millis ini, kirim email kosong ke:
[EMAIL PROTECTED]
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/Programmer-VB/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/