2014-04-17 12 views
5

Ho un grafico a torta, creato con TeeChart, che sta benissimo nel sistema su cui sviluppo, ma quando lo eseguo su una macchina diversa, la "torta" viene espulsa in una forma ovale anziché circolare.Cosa può far sì che un grafico a torta venga "schiacciato"?

Mi sono assicurato che la proprietà Circled (che dovrebbe garantire che ciò che viene disegnato sia sempre un cerchio, non un'ellisse) sullo TPieSeries sia impostato su True e non venga modificato in alcun modo.

Ho controllato per assicurarsi che questo non sia un artefatto di diverse risoluzioni dello schermo. Non è; l'altro sistema è sulla stessa risoluzione del mio box di sviluppo.

L'altro sistema aveva Aero spento. Ho provato le cose girando Aero sulla mia scatola di sviluppo, e le carte non sono state schiacciate.

A questo punto sono praticamente senza idee. Qualcuno sa cosa può causare un grafico a torta che imposta Circled = true per disegnare come un ovale piuttosto che un cerchio?

Buono:Good pie chart Bad:Bad pie chart

Questo è l'esatto stesso programma, lavorando fuori gli stessi dati esatti, presso la stessa identica risoluzione dello schermo, su due computer diversi.

MODIFICA: Come discusso nei commenti, ho provato questo e ho scoperto che entrambi i sistemi hanno non solo la stessa risoluzione, ma anche lo stesso DPI.

+2

Mi piacerebbe controllare cosa l'altro rapporto del computer per LOGPIXELSX/LOGPIXELSY. –

+0

@SertacAkyuz: Quelle sono costanti definite in Windows.pas. In che modo un altro sistema dovrebbe riportare valori diversi quando queste sono costanti che vengono impostate nella fase di compilazione? –

+0

@Mason - Ovviamente intendevo chiamare GetDeviceCaps. –

risposta

6

Dopo un po 'di debug e scavo nel problema, risulta che questo sta accadendo perché il codice TeeChart chiama GetDeviceCaps con i parametri ORIZZIZZA e VERIZZA, per determinare la dimensione fisica dei pixel sullo schermo e regolare il contorno del cerchio rect di conseguenza. Sfortunatamente, this call is only valid on a printer, and not on a display device, and it has known issues on Windows 7, che utilizzano entrambi i sistemi in questione. Ho segnalato il problema a Steema. Spero che possano risolverlo.

UPDATE: Ottenuto una risposta da Steema, in cui hanno riconosciuto il problema e fornito una soluzione alternativa. Copia qui nel caso qualcuno altro corre in problema:

Un'alternativa che permette soluzione il problema è quello di personalizzare il Pie Raggio usando, forse, l'altezza del rettangolo grafico per governare la dimensione avete bisogno.

Esempio:

procedure TForm9.Button1Click(Sender: TObject); 
var cHeight : Integer; 
begin 
    cHeight := Round((Chart1.ClientRect.Bottom - Chart1.ClientRect.Top) * 0.80); //80% 

    series1.CustomXRadius := cHeight div 2; 
    series1.CustomYRadius := series1.CustomXRadius; 
end; 
Problemi correlati