> i think you call paint.begin in a _draw event, no ? No, ...Draw.begin please see the all class source. Sub Disegna() is called continuously...how would be a better way ? Shall I put Draw.Begin only once at the opening of the window ?
Thanks Pino 2011/5/30 Pino Zollo <pinozo...@gmail.com>: > > Hi > > This message is a bit obscure for me..... please help ! > > > > It appears in the Console. > > > > "QPainter::begin: A paint device can only be painted by one painter at a > > time. > > QPainter::end: Painter not active, aborted" > > > > Actually I can not determine which statement and which class exactly > > generates it ' Gambas class file '********************************************************** Static Public Fine As Float Static Public Inizio As Float Static Public zoom As Float Static Public Freq As Float Static Public Fin As Float Static Public Ffin As Float Static Public F2 As Float Static Public D As Float = 0 Static Public Ba As Boolean Static Public vfo0 As Float = 14200 Static Public FullSpan As Boolean = False Static Public DH As Float Static Public OldBand As String = "20m" Static Public Band As String = "20m" Static Public CaCol As Integer ' Call Color Static Public BeCol As Integer ' Background Color Public Sub _new() End Public Sub Form_Open() Me.Text = "DBLog Scale" Me.Top = Settings["Scale/Top", Me.Top] Me.Left = Settings["Scale/Left", Me.Left] Me.Height = Settings["Scale/Height", Me.Height] Me.Width = Settings["Scale/Width", Me.Width] ' ME.Move(200, 80) ' ME.ShowModal ' a cosa serve ?? ' ME.Sticky = TRUE ' does nothing ' DEBUG ME.Sticky ' ME.TopOnly = TRUE ' DEBUG ME.TopOnly ' Why is always false ? after 2.15 it works... Inizio = FMain.lowerl Fine = FMain.upperl Freq = FMain.F 'Val(Replace$(FMain.FreqRadio.text, ",", "")) '14.200 ' dummy zoom = 30 ' 30 KHz 30 marks in the full Height F2 = Freq * 1000 ' in KHz 'DEBUG Inizio;; Fine;; Freq DrawingArea1.Resize(Me.ClientW, Me.ClientH) DrawingArea1.Cached = True ' Draw.Begin(DrawingArea1) Disegna() Catch Debug error.text, error.Where End Public Sub Form_Close() ' Draw.End Settings["Scale/Top"] = Me.Top Settings["Scale/Left"] = Me.Left Settings["Scale/Height"] = Me.Height Settings["Scale/Width"] = Me.Width End Public Sub Form_Resize() Try DrawingArea1.Resize(Me.ClientW, Me.ClientH) 'TRY Disegna() ' DrawingArea1.Refresh ' what is this for ? End Public Sub Disegna() ' dovrebbe aspettare la fine della scrittura su Band Dim i, passo, Rap, St, En, p0 As Float Dim F, P, R As Integer Dim hField As ResultField ' for Spots Dim iInd As Integer Dim FSpot As Float Dim Raw_Count As Integer Dim Columns_Count As Integer _label: Inizio = FMain.lowerl ' Get band limits Fine = FMain.upperl Band = FMain.ComboBand.Text If Band <> OldBand And FullSpan Then ' Put in Full Span the new band zoom = (Fine - Inizio) * 1000 Fin = Inizio Freq = (Fine + Inizio) / 2 OldBand = Band Endif Draw.Begin(DrawingArea1) ' <--------------------------------------------------------------------- here Rap = Draw.w / 3 DH = Draw.H ' [GB2:BCOL] DrawingArea1.BackColor = Color.White ' OK works DrawingArea1.Background = Color.White ' OK works Draw.Foreground = &HDFEFFF& Draw.FillStyle = Fill.Solid Draw.FillColor = &HDFEFFF& Draw.Rect(0, 0, Rap, Draw.h) Draw.Foreground = Color.Black Draw.Line(Rap, 0, Rap, Draw.H) St = Inizio * 1000 ' in KHz En = Fine * 1000 F = Int((Freq * 1000 - zoom / 2)) Fin = F passo = (Draw.H / (zoom)) ' KHz -1 senza Int Draw.Font.Size = 8 For i = 0 To Draw.H + 1 Step passo ' dirty trick !! the +1 If F > En Or F < St Then Draw.Foreground = Color.Red Else Draw.Foreground = Color.Black End If If F Mod 5 <> 0 Then Draw.Line(Rap - 5, i, Rap, i) Else Draw.Line(Rap - 10, i, Rap, i) If FMain.comma Then Draw.Text(Replace$(Format$(F / 1000, "##0.000"), ",", "."), 0, i - 6,,, Align.TopLeft) ' -6 because Align seems not to work Else Draw.Text(Format$(F / 1000, "##0.000"), 0, i - 6,,, Align.TopLeft) Endif End If Inc F Next Ffin = F - 1 ' DEBUG Fin;; Ffin;; Ffin - Fin;; F2;; St;; En p0 = (F2 - Fin) / (Ffin - Fin) * Draw.H P = Int(p0) R = Int(Rap) ' Draw.Transparent = TRUE Draw.Foreground = Color.Red Draw.FillColor = Color.Red Draw.Polygon([R, P, R - 8, P - 5, R - 8, P + 5]) ' Fill spots Draw.Font.Size = 9 Draw.FillColor = Color.White For iInd = 0 To FBand.GridStations.Rows.Count - 1 If FMain.comma Then Try Fspot = Val(Replace$(FBand.GridStations[iInd, 1].Text, ".", ",")) * 1000 Else Try Fspot = Val(FBand.GridStations[iInd, 1].Text) * 1000 Endif If Fspot >= Fin And Fspot <= Ffin Then SelectColor(iInd) P = Int((FSpot - Fin) / (Ffin - Fin) * Draw.H) Draw.Foreground = Color.White Draw.FillColor = BeCol Draw.Rect(R + 1, P - 6, Draw.W - R, 13) ' for background Draw.Foreground = CaCol Draw.Line(R, P, R + 20, P) Draw.Text(FBand.GridStations[iInd, 2].Text, R + 25, P - 6,,, Align.TopLeft) Endif Next Draw.End Catch Debug error.text, error.Where End Public Sub SelectColor(I As Integer) Select Case Left$(FBand.GridStations[I, 0].Text, 4) Case " NEW" BeCol = &HFFFF00& CaCol = &HFF0000& ' yellow was &HFF0000& Case " NEE" ' Draw.Background = &HCBFFCC& ' does not work ' Draw.BackColor = &HCBFFCC& ' does not work BeCol = &HCBFFCC& CaCol = &HFF0000& ' red Case "CQCQ" BeCol = Color.White CaCol = &H0505050& Case "DIAL" BeCol = Color.White CaCol = &H0800040& Case "WKB4" BeCol = Color.White CaCol = &H0A0A0A0& Case " Not" BeCol = Color.White CaCol = Color.Blue Case "MEMO" BeCol = Color.White CaCol = &H0000000& Default BeCol = Color.White CaCol = Color.Blue End Select End Public Sub Control(VFO As Float) If VFO <> vfo0 Then D = (Ffin - Fin) / 10 F2 = VFO If Not FullSpan Then ' do not slide is in Fill span mode If F2 < Fin Or F2 > Ffin Then Freq = F2 / 1000 D = 0 Else If Abs(F2 - Fin) < D Then Ba = True Freq = (F2 + 3 * D) / 1000 End If If Abs(F2 - Ffin) < D Then Ba = False Freq = (F2 - 3 * D) / 1000 End If End If Endif ' Form_Resize Disegna() vfo0 = VFO Endif End Public Sub DrawingArea1_Menu() MenuPopUp.popup Catch Debug error.text, error.Where End Public Sub Zin_Click() zoom = zoom - 10 If zoom <= 0 Then zoom = 3 Freq = F2 / 1000 FullSpan = False Disegna() Catch Debug error.text, error.Where End Public Sub Zo_Click() zoom = zoom + 10 Freq = F2 / 1000 FullSpan = False Disegna() Catch Debug error.text, error.Where End Public Sub Reset_Click() zoom = 30 Freq = F2 / 1000 FullSpan = False Disegna() Catch Debug error.text, error.Where End Public Sub CW_Click() zoom = 10 Freq = F2 / 1000 FullSpan = False Disegna() Catch Debug error.text, error.Where End Public Sub DIGI_Click() zoom = 3 Freq = F2 / 1000 FullSpan = False Disegna() Catch Debug error.text, error.Where End Public Sub SSB_Click() zoom = 90 Freq = F2 / 1000 FullSpan = False Disegna() Catch Debug error.text, error.Where End Public Sub Full_Click() zoom = (Fine - Inizio) * 1000 Fin = Inizio Freq = (Fine + Inizio) / 2 FullSpan = True Disegna() Catch Debug error.text, error.Where End Public Sub DrawingArea1_MouseDown() Dim Fm As Float If Mouse.Left Then Fm = (Fin + (Ffin - Fin) * Mouse.Y / DH) / 1000 FMain.FreqA = Fm FMain.FreqB = Fm If FMain.fldigi_on Then FMain.Command_fldigi("log.set_call", "", "main.set_frequency", Str(Int(Fm * 1000000)), FMain.ComboMode.Text) ' IF FMain.comma THEN ' ' FMain.Command_fldigi("log.set_call", "", "main.set_frequency", Replace$(Str(Fm), ".", ""), FMain.ComboMode.text) ' ELSE ' FMain.Command_fldigi("log.set_call", "", "main.set_frequency", Str(Int(Fm * 1000000)), FMain.ComboMode.Text) ' ENDIF Else FMain.tune = True ' Inform FMain to change VFO frequencies Endif Endif Catch Debug error.text, error.Where End ------------------------------------------------------------------------------ Simplify data backup and recovery for your virtual environment with vRanger. Installation's a snap, and flexible recovery options mean your data is safe, secure and there when you need it. Data protection magic? Nope - It's vRanger. Get your free trial download today. http://p.sf.net/sfu/quest-sfdev2dev _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user