CREAZIONE RADAR PER RALLY

Moderator: Enrico Maria Giordano

User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Quantità di record intorno ai 10000 sono assolutamente tranquilli per un DBF. Ma anche con 100000 non avresti problemi. C'è gente che usa DBF con milioni di record senza alcun problema.

EMG
Last edited by Enrico Maria Giordano on Fri May 12, 2006 6:38 am, edited 1 time in total.
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Post by Silvio »

OK
Rritornando alle linee del roadbook vorrei sapere come posso disegnare
un BMP ad una certa posizione cioè se guardi questa figura puoi capire

Image

Ovviamente ho disegnato come vorrei costruirlo

Sopra c'è un MEMO e va bene dove inseriro il titolo del roadbook ed altre informazioni tecniche

Sotto c'è la prima linea del roadbook a sinistra i km totali e parziali
in mezzo il bmp dove posso inserire i simbolini e a destra altri get

Come posso fare per disegnare un rettangolo nero in una Wndchild ?
per i get ok ma non riesco ad inserire il bmp nel mezzo
ho provato a vedere con la clusola design dove si collocava ma mi si crea grandissimo
io ho fatto cosi :

Code: Select all

function NuovoRB()

   local oWndChild, oBar, oBmp

   LOCAL KMTotali,KMParziali,Titolo,Note1,Note2
   LOCAL oGet1

   DEFINE WINDOW oWndChild MDICHILD COLOR "N/W"  of    oWnd;
   title "Nuovo RoadBook"

   DEFINE BUTTONBAR oBar 3D SIZE 25, 25 OF oWndChild

   DEFINE BUTTON OF oBar ACTION PutLabel( oBmp ) TOOLTIP "Testo"
   DEFINE BUTTON OF oBar ACTION PutBitmap( oBmp ) TOOLTIP "Simboli"
   DEFINE BUTTON OF oBar ACTION PreView( oBmp ) TOOLTIP "Anteprima di stampa"




    // titolo
   @ 2,0 get oGet1 VAR Note1 MEMO SIZE 700, 100 OF oWndChild


   //Linea
   @ 10,2 say "KM TOTALI"   SIZE 80, 50 OF oWndChild
   @ 14,2 say "KM PARZIALI" SIZE 80, 50   OF oWndChild

   @ 10,10 get oGet2 VAR KMTotali SIZE 80, 50  OF oWndChild
   @ 14,10 get oGet2 VAR KMParziali SIZE 80, 50 OF oWndChild

   @ 10,20 BITMAP oBmp SIZE 200, 100  OF oWndChild   

   oBmp:bPainted = { | hDC | DrawSections( hDC ) }

  * oBmp:oHScroll:SetRange( 1, 1200 )
  * oBmp:oHScroll:nPgStep = 20

   oWndChild:SetControl( oBmp )

   ACTIVATE WINDOW oWndChild
@ 10,20 BITMAP oBmp SIZE 200, 100 OF oWndChild
questa bmp mi si crea grandissima come mai ' io la volevo al massimo 200x100 : tieni presente che io in questa bmp ci metto i simbolini ecco cosa mi serve quindi deve essere bianca con un rettangolo giallo intorno per delimitare ilperimetro dove inserire i simbolini




Poi con questa funzione dovrei costruire il perimetro che ti ho detto pocanzi ma davvero non capisco a quali coordinate si riferisce il fillrect ...
mi dai una dritta per favore?

Code: Select all

function DrawSections( hDC )

   local oBrWhite, oBrCyan

   DEFINE BRUSH oBrWhite COLOR CLR_WHITE
   DEFINE BRUSH oBrCyan  COLOR CLR_YELLOW

  * FillRect( hDC, {   10, 20, 100, 641 }, oBrWhite:hBrush )
   *FillRect( hDC, { 100, 50, 150, 641 }, oBrCyan:hBrush )
  * FillRect( hDC, { 150, 0, 200, 641 }, oBrWhite:hBrush )

   oBrWhite:End()
   oBrCyan:End()
Best Regards, Saludos

Falconi Silvio
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Ti posso aiutare solo se:

1. Mi sottoponi un problema alla volta e me lo descrivi in modo sintetico e preciso.

2. Prepari un esempio minimale che lo mostri e che io possa poi restituirti corretto e funzionante.

EMG
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Post by Silvio »

ok te lo preparo dopo xchè adesso sono a scuola.
poi lo metto qui il test ?
Best Regards, Saludos

Falconi Silvio
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Sì (oppure lo mandi direttamente alla mia email, come ti pare), ma è essernziale che sia piccolo e compilabile altrimenti non credo che potrò dedicarmici. Sei tu che devi fare lo sforzo iniziale per ridurlo ai minimi termini.

EMG
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Post by Silvio »

MA LA CLASSE :TMetaFile() COME SI USA ?
cioè io voglio creare un BMP oBMP con la metafile alla linea 14,30 e la dimensione deve essere 200x100
Non so mi crea un immagine grandiisima...

vabbe faccio il test intanto
Best Regards, Saludos

Falconi Silvio
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Forse intendevi dire la classe TBitmap? Comunque ti sconsiglio di utilizzare classi per questo lavoro di "rendering" dei bitmap. Semplicemente disegnali alle giuste coordinate usando la funzione PalBmpDraw() all'interno dell'evento ON PAINT.

EMG
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Post by Silvio »

si ma Linares mi ha detto di creare un user control
Anche a me mi sembra la soluzione giusta
Linares inoltre mi ha detto di iniziare a disegnare una linea del roadbook prendendo in esame il paint della classe Ttabs come riferimento

cioè dovrei disegnare questo inizialmente

Image







il rettangolo mi sembra facile a crearlo ma poi davanti alla classe TTbs ovviamente rimodificata in Rbook mi perdo
Eppure devo solo fare un rettangolo diviso in tre parti
inserire due prompt per i say,una bitmap al centro,e altri prompt per altri tre say
questo è il metodo Paint

Code: Select all

METHOD Paint() CLASS TTabs

   local aInfo := ::DispBegin()
   local hDarkPen  := CreatePen( PS_SOLID, 1, GetSysColor( COLOR_BTNSHADOW ) )
   local hGrayPen  := CreatePen( PS_SOLID, 1, GetSysColor( COLOR_BTNFACE ) )
   local hLightPen := CreatePen( PS_SOLID, 1, GetSysColor( COLOR_BTNHIGHLIGHT ) )
   local n, nCol := 5, nHeight := 15
   local hOldFont, hOldBrush, hOldPen
   local hDC := ::hDC
   local hGrayBrush := CreateSolidBrush( ::nClrPane )
   local hDarkBrush := CreateSolidBrush( GetSysColor( COLOR_INACTIVECAPTION ) )
   local lNeedButtons := .f.

   if LargeFonts()
      nHeight += 3
   endif

   FillRect( ::hDC, GetClientRect( ::hWnd ), ::oBrush:hBrush )

   hOldFont  = SelectObject( hDC, ::oFont:hFont )
   hOldPen   = SelectObject( hDC, hDarkPen )
   hOldBrush = SelectObject( hDC, hDarkBrush )

   MoveTo( hDC, 0, 0 )
   LineTo( hDC, ::nWidth(), 0 )

   SetBlackPen( hDC )
   MoveTo( hDC, 0, 1 )
   LineTo( hDC, ::nWidth(), 1 )

   SetTextColor( hDC, CLR_WHITE )

   if Len( ::aSizes ) < Len( ::aPrompts )
      ::Default()
   endif

   DEFAULT ::nOffset := 1

   for n = ::nOffset to Len( ::aPrompts )

      SelectObject( hDC, If( n == ::nOption, hGrayBrush, hDarkBrush ) )
      SetBlackPen( hDC )

      if n == ::nOffset .or. n == ::nOption
         PolyPolygon( hDC, { { nCol, 1 },;
                               { nCol + 5, nHeight },;
                               { nCol + 9 + ::aSizes[ n ], nHeight },;
                               { nCol + 14 + ::aSizes[ n ], 1 },;
                               { nCol, 1 } } )
      else
         PolyPolygon( hDC, { { nCol + 2, 7 },;
                               { nCol + 5, nHeight },;
                               { nCol + 9 + ::aSizes[ n ], nHeight },;
                               { nCol + 14 + ::aSizes[ n ], 1 },;
                               { nCol + 4, 1 },;
                               { nCol + 2, 7 } } )
      endif

      if n == ::nOption
         SelectObject( hDC, hGrayPen )
         MoveTo( hDC, nCol, 0 )
         LineTo( hDC, nCol + 14 + ::aSizes[ n ], 0 )
         MoveTo( hDC, nCol + 1, 1 )
         LineTo( hDC, nCol + 14 + ::aSizes[ n ], 1 )

         SelectObject( hDC, hLightPen )
         MoveTo( hDC, nCol + 1,  2 )
         LineTo( hDC, nCol + 6, nHeight - 1 )

         SelectObject( hDC, hDarkPen )
         LineTo( hDC, nCol + ::aSizes[ n ] +  8, nHeight - 1 )
         LineTo( hDC, nCol + ::aSizes[ n ] + 13,  0 )

         SetTextColor( hDC, ::nClrText )
         SetBkColor( hDC, ::nClrPane )
         DrawText( hDC, ::aPrompts[ n ],;
                   { 1, nCol + 4, 15, nCol + 5 + ::aSizes[ n ] + 5 },;
                   nOr( DT_CENTER, DT_VCENTER ) )
      else
         SetTextColor( hDC, GetSysColor( COLOR_INACTIVECAPTIONTEXT ) )
         SetBkColor( hDC, GetSysColor( COLOR_INACTIVECAPTION ) )
         DrawText( hDC, ::aPrompts[ n ],;
                   { 2, nCol + 3, 19, nCol + 5 + ::aSizes[ n ] + 6 },;
                   nOr( DT_CENTER, DT_VCENTER ) )
      endif
      nCol += ::aSizes[ n ] + 4 + 6

      if ( nCol ) > ::nWidth
         lNeedButtons := .t.
         exit
      endif

   next

   if ! Empty( ::oBtnLeft )
      if ::nOffset > 1 .or. lNeedButtons
         ::oBtnLeft:Move( 4, ::nWidth - 24, 11, 15, .t. )
         ::oBtnRight:Move( 4, ::nWidth - 25 + 12, 11, 15, .t. )
         ::oBtnLeft:Show()
         ::oBtnRight:Show()
         ::oBtnLeft:Paint()
         ::oBtnRight:Paint()
         if ::nOffset > 1
            ::oBtnLeft:Enable()
         else
            ::oBtnLeft:Disable()
         endif
         if ! lNeedButtons
            ::oBtnRight:Disable()
         else
            ::oBtnRight:Enable()
         endif
      else
         ::oBtnLeft:Hide()
         ::oBtnRight:Hide()
      endif
   endif

   SelectObject( hDC, hOldPen )
   SelectObject( hDC, hOldFont )
   SelectObject( hDC, hOldBrush )

   DeleteObject( hDarkPen )
   DeleteObject( hGrayPen )
   DeleteObject( hLightPen )
   DeleteObject( hDarkBrush )
   DeleteObject( hGrayBrush )

   ::DispEnd( aInfo )

return nil

mi daresti solo una dritta a disegnare il rettangolo , e il bitmap in mezzo poi i prompt non dovrebbero essere difficili ...


grazie
Best Regards, Saludos

Falconi Silvio
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Silvio wrote:si ma Linares mi ha detto di creare un user control
Anche a me mi sembra la soluzione giusta
Non mi sono spiegato bene: intendevo dire di non utilizzare oggetti per disegnare i bitmaps ma farlo direttamente con la funzione PalBmpDraw() nell'evento ON PAINT di una finestra o di un tuo controllo.
Silvio wrote:cioè dovrei disegnare questo inizialmente
[img=http://img387.imageshack.us/img387/1993/linearoadb2ah.png]
Non riesco a vedere nessuna immagine.
Silvio wrote:mi daresti solo una dritta a disegnare il rettangolo , e il bitmap in mezzo
Per il rettangolo usa le API MoveTo() e LineTo() mentre per il bitmap la funzione PalBmpDraw().

EMG
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Post by Silvio »

bene mi sono creato una funzione per disegnare le linee

Code: Select all

  
Function DrawLine( hDC, x, y , high, widht, color)
   LOCAL n, hPen, hOldPen
   hPen := CreatePen( 0, 2, color )
   hOldPen := SelectObject( hDc, hPen )
   MoveTo( hDC, y, x )
   LineTo( hDC, widht, high)
   SelectObject( hDc, hOldPen )
   DeleteObject( hPen )
   return NIL
con questo metodo sarebbe più facile a disegnare ste linee
DrawLine( hDC, 0, 0 , 0,100,CLR_BLACK) peresempio

Adesso però ho un problema
per intenderci la classe tab disegna il suo controllo in fondo mentre io voglio disegnarlo sopra dove è l'istruzione che fa questo ?
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Post by Silvio »

hO CREATO IL RETTANGOLO CON TUTTI GLI INTRAMEZZI
PERO ADESSO IL CONTROLLO ME LO CREA CON UNO SPAZIO SOPRA CHE NON RIESCO A TOGLIERE

HO SEGNATO DI ROSSO LO SPAZIO DA TOGLIERE

Image

HAI RICEVUTO I FILES ?[/img]
Best Regards, Saludos

Falconi Silvio
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Silvio wrote:con questo metodo sarebbe più facile a disegnare ste linee
DrawLine( hDC, 0, 0 , 0,100,CLR_BLACK) peresempio
Cosa ti impedisce di creartelo?
Silvio wrote:Adesso però ho un problema
per intenderci la classe tab disegna il suo controllo in fondo mentre io voglio disegnarlo sopra dove è l'istruzione che fa questo ?
Immagino sia solo una questione di coordinate.

EMG
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Post by Enrico Maria Giordano »

Silvio wrote:HAI RICEVUTO I FILES ?
Sì, ma non sono l'esempio minimale del problema che ti avevo chiesto. Mi dispiace ma non posso fare il lavoro al posto tuo.

EMG
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Post by Silvio »

ok
ho trovato l'errore c'era scritto ownd:bottom() o qualcosa di simile e quindi adesso va ok

ho inserito anche la bitmap al centro : se vedi il metodo new per intenderci

Quindi adesso la classe disegna la linea bene o male e cmq fno a qui ci siamo ( poi la potrei modificare alla fine)
io la richiamo semplicemente con

@ 0,0 Rbook oRB of oWnd
niente di piu' facile

adesso devo mettere i get

e dove li metto ?
cioè se li metto in metodo Paint poi li posso editare ?
oppure li devo inserire nel metodo New/redefine?
Best Regards, Saludos

Falconi Silvio
Post Reply