Solved

vb 2008 drawline not working in Vista

Posted on 2009-04-12
5
314 Views
Last Modified: 2013-11-08
What am I missing here?

I am using Visual Basic Express 2008.

I have a working pilot logbook and flight planning application, which was written, compiled, and functions well in Windows XP on my old PC.

The application  uses e.graphics.drawline, e.graphics.drawcircle, e.graphics.drawarc, e.graphics.drawellipse and e.graphics.drawrectangle to draw a simple flight plan chart.

When I compile the code and run it on my new laptop (Sony Vaio VGN-NS15G) none of the lines, arcs, circles or rectangles appear. There are no runtime errors.

The rest of the programme runs fine on the laptop. It is just the graphics functions that are ignored so I am assuming it is a result of some setting or switch that I have missed  to make the graphics visible on the Vista laptop.

What am I overlooking?

0
Comment
Question by:bantamb20
  • 3
  • 2
5 Comments
 
LVL 15

Accepted Solution

by:
oobayly earned 500 total points
ID: 24129260
I'm guessing from you example that the lines etc. are being drawn in the OnPaint event. What type of control are you painting onto? Also, have you added a breakpoint in the OnPaint event to verify that it's being executed?

A workaround could be to create a bitmap on which you draw your flight plan, and then set the bitmap as the Image for a PictureBox control. The bonus with doing this is that you only have to draw the image once, not ever time the control gets redrawn, and also you'll be able to save the image (if you're so inclined)
0
 

Author Comment

by:bantamb20
ID: 24132731

I am painting to the form  using the form_paint subroutine, not OnPaint.
This process works fine in the XP environment.

First the DrawAll sub is executed, which contains the various subs to draw each portion of the flight plan. This enabled me to debug the earlier version easily, and allows users to choose various overlays, add text for latitude and longitude, names of places and so on.
All this worked fine in  XP.

I have checked with breakpoints, and yes it is executing all the code.

I have attached the form_paint code, the DrawAll sub, and the simplest of the  other subs it calls, the DrawBorder sub.

Your suggestions of using OnPaint and drawing to a bitmap are good ones. I will investigate and see what's involved to change the present method of drawing the plan.

I am going flying today so won't be able to complete the task now, but will get on to it asap.

Cheers


 

    ' ==================================================================

    '  paint this form and draw the flight track and other little bits

    ' ------------------------------------------------------------------

    Private Sub frmShowMap_Paint(ByVal sender As Object, ByVal e As  _

    System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
 

        Try
 

            If bGo Then

                Cursor = Cursors.WaitCursor

                DrawAll(e)

            End If
 

        Catch ex As Exception

            Cursor = Cursors.Default

            MsgBox(ex.Message)

        End Try
 

        Cursor = Cursors.Default
 

    End Sub
 
 
 

    ' ==================================================================

    '  draw background map, aircraft tracks, zone, area boundaries,text 

    ' ------------------------------------------------------------------

    Private Sub DrawAll(ByVal e As PaintEventArgs)
 

        Try

            If bGo = True Then

                bGo = False
 

                ' draw debugging grid

                DrawGraticule(e)
 

                ' draw border around map area

                DrawBorder(e)
 

                ' draw nz background map

                DrawNZMap(e, bShowMap)
 

                ' draw latitude and longitude grid

                DrawGrid(e, bShowGrid)
 
 

                ' draw airport control zones CTR. if files exist and zones in area, draw them

                If CTZFindFiles() And CTZonesInArea() Then CTZonesDraw(e, bShowCTZones)
 

                ' draw danger areas 

                DrawDanger(e)
 

                ' draw temporary airspace restrictions

                DrawTempo(e)
 

                ' draw tracks and aerodromes and waypoints

                DrawTracks(e, bShowTrack)
 

                ' write mag heading or distance and leg time text along track line 

                DrawText(e, bShowText)
 

            End If
 

        Catch ex As Exception

            MsgBox(ex.Message & " drawmap error")

        End Try
 

    End Sub
 
 
 

    ' ==========================================================

    '  draw border around map

    ' ----------------------------------------------------------

    Private Sub DrawBorder(ByVal e As PaintEventArgs)

        Try

            e.Graphics.DrawRectangle(Pens.Black, 2, 2, MEWIDTHH, MEHEIGHT)

        Catch ex As Exception

            MsgBox(ex.Message & " --- drawborder")

        End Try
 

    End Sub

Open in new window

0
 
LVL 15

Expert Comment

by:oobayly
ID: 24132776
Now that's a hobby/job I wouldn't mind having.

If the Paint event doesn't do the job, I very much doubt that the OnPaint override would do the job. I can only imagine it's an effect of the Aero interface. Not that I've seen any mention of there being issues with drawing on a form's graphics object in Vista.
0
 

Author Comment

by:bantamb20
ID: 24142166

I have re-written the map display section to draw to a bitmap and display it on  a picture box.  It works well thanks

[The flying (microlights) and the coding are both hobbies . . .  one more expensive than the other]
0
 

Author Closing Comment

by:bantamb20
ID: 31569395
The programme now works well in Vista as well as XP with this bitmap solution, it's a sunny day ... time to go flying and turn some petrol into noise . . . cheers
0

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

746 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now