La tela è forte! - pagina 6

 
Vladimir Karputov:

canvas.Rectangle non è un oggetto, è un comando per disegnare un mucchio di pixel. È come un colpo di pistola: parte un proiettile e buon viaggio. Non c'è feedback.

Grazie per il no feedback - ho capito.

Rashid Umarov:

C'è un articolo intitolato Esplorare la classe CCanvas.Implementazione della trasparenza degli oggetti grafici, ci dovrebbe essere una soluzione.

L'ho visto 217 volte e ora è aperto, ma non ho visto nessuna soluzione.

Ho bisogno di un esempio dal vivo per cambiare il colore della tela e della cornice in OnTick().

Grazie!

 
Vitaly Muzichenko:

Grazie per la connessione - capito.

L'ho guardato 217 volte, ed è aperto ora, ma non ho visto una soluzione.

Ho bisogno di un esempio dal vivo per cambiare il colore della tela e della cornice in OnTick().

Grazie!

Sulla base del mio codice, appena bloccato nel cambiare il colore della tela e disegnare una cornice.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static long counter=0;
   counter++;
   if(counter%40==0)
     {
      m_canvas.Erase(ColorToARGB(clrBlue,210));
      m_canvas.Rectangle(10,10,m_canvas.Width()-10,m_canvas.Height()-10,ColorToARGB(clrRed,255));
      m_canvas.Update();
      return;
     }
   if(counter%20==0)
     {
      m_canvas.Erase(ColorToARGB(clrRed,210));
      m_canvas.Rectangle(10,10,m_canvas.Width()-10,m_canvas.Height()-10,ColorToARGB(clrBlue,255));
      m_canvas.Update();
      return;
     }
  }


Dato che uso colori con trasparenza, ho specificato"COLOR_FORMAT_ARGB_NORMALIZE" quando ho creato la tela:

//--- create canvas
   if(!m_canvas.CreateBitmapLabel("SampleCanvas",5,15,700,300,COLOR_FORMAT_ARGB_NORMALIZE))
 
Vladimir Karputov:

Basandomi sul mio codice, ho solo messo un cambio di colore della tela e disegnato una cornice.


Dato che uso colori con trasparenza, ho specificato"COLOR_FORMAT_ARGB_NORMALIZE" quando ho creato la tela:

Ora darò un'occhiata, grazie!

Quello che mi aspettavo di ottenere - ottenuto molto tempo fa, è una tela appena trasparente con una cornice e una selezione, ma ora ho bisogno di cambiare i colori, il che non funziona.


 
Vitaly Muzichenko:

Ora darò un'occhiata, grazie!

Quello che mi aspettavo di ottenere - ottenuto molto tempo fa, è una tela appena trasparente con un bordo e una selezione, ma ora ho bisogno di cambiare i colori, il che non funziona.


Probabilmente il problema è ENUM_COLOR_FORMAT (quando si crea la tela) e il metodo per ottenere il colore.

 
Vitaly Muzichenko:

In OnInit creo una tela

Poi ho bisogno di cambiare il colore alle 10:00 in grigio in OnTick e riportarlo allo stato originale alle 11:00.

Non funziona:

Domanda:

Come posso cambiare il colore della tela e della cornice - nessun riferimento ai nomi degli oggetti?

Grazie!

Ho la sensazione che tu abbia pasticciato con i colori.

Qual è il significato di questa frase:

ObjectSetInteger(0,"CanvasExamlple",OBJPROP_COLOR,clrNONE);

COLOR_FORMAT_ARGB_NORMALIZE non ha bisogno di riempire la tela con il colore di sfondo, ma piuttosto di riempirla con zero:

canvas.Erase(0);

perché significa che la tela è completamente trasparente.

È anche conveniente usare la rappresentazione a 16 colori:

per esempio:

0x00000000 - nero completamente trasparente

0xFF000000 - nero opaco

0xFFFFFFFFFF - bianco opaco

0xFFFF0000 - rosso opaco

0xFF00FF00 - verde opaco

0xFF0000FF - blu opaco

0x8000FF00 - verde traslucido

0x80FFFFFFFF - nero traslucido

0xFF808080 - grigio

ecc.

 
Vladimir Karputov:

Probabilmente un problema con ENUM_COLOR_FORMAT (quando si crea il kanvas) e il metodo per ottenere il colore.

Problema risolto.

Il mio codice non ha rimosso la tela quando ho chiuso il terminale, quindi quando ho iniziato era già sul grafico, quindi non si è inizializzato, e le modifiche alle proprietà non sapevano dove applicarsi.

Grazie a tutti!

 
Nikolai Semko:

Ho la sensazione che tu abbia pasticciato con i colori.

Qual è il senso di questa linea?

ObjectSetInteger(0,"CanvasExamlple",OBJPROP_COLOR,clrNONE);

Il punto della linea è che senza di essa si ottiene questa immagine


Se con la linea, allora è giusto, una bella cornice con il mio colore scelto


 
Vitaly Muzichenko:

Problema risolto.

Ilmio codice non ha rimosso il canvas quando ho chiuso il terminale, quindi era già sul grafico quando ho iniziato, quindi non si è inizializzato, e le modifiche alle proprietà non sapevano dove applicarsi.

Grazie a tutti!

Hmmm, non si può davvero indovinare dove sia il cane in una volta sola :)

 

Dimostrazione di uno script con scalatura bitmap

Nel file Ex5 si trova un file BMP abbastanza grande come risorsa.


File:
TestScaling.ex5  784 kb
 
Nikolai Semko:

Dimostrazione dello script di scalatura dei raster

No, è davvero impressionante.

Ma, dovete fare un qualche tipo di utile add-on che sfrutti tutte quelle caratteristiche di Canvas.

Affinché i vostri sviluppi non subiscano lo stesso destino dell'adattatore CGA - un meraviglioso adattatore grafico, incompreso e sottovalutato dai suoi contemporanei.

Io stesso ho sempre considerato il CGA "zoppo come sempre" battendo gli otto bit del Commodore 64 o del Sinclair Spectrum. Ma recentemente si è scoperto che, semplicemente a causa della mancanza di popolarità - quasi nessuno ha usato tutte le opportunità di questa carta. E non c'erano quasi giochi che potessero competere con gli home computer a otto bit.

Se IBM avesse promosso CGA, se questo demo fosse apparso nel 1981 - CGA sarebbe stato molto più popolare, e forse EGA sarebbe stato rilasciato più tardi:


Quando guardo questo schermo, non posso credere che questo sia possibile su un vecchio adattatore CGA con la sua videomemoria da 16K, collegato a un comune televisore domestico (il monitor RGB non è adatto a questo scopo. Questa era l'idea degli sviluppatori - migliore qualità del testo sul monitor RGB, ma tavolozza di colori povera, ma ricche possibilità grafiche con testo mal leggibile sul televisore domestico con un ingresso composito)