2014-11-24 33 views
8

Ho disegnato i controlli FireMonkey, ma c'è un problema con cui ho riscontrato alcuni problemi reali, ovvero come incorporare bitmap negli stili FireMonkey utilizzando lo Style Designer FireMonkey (e in particolare non lo stile di progettazione bitmap). Alcuni oggetti in stile (TButtonStyleObject, ad esempio), hanno proprietà BitmapLink, ma non riesco a vedere come funzionano nei nuovi stili personalizzati generati per un controllo FireMonkey.Utilizzo di TBitmapLinks con lo Style Designer FireMonkey

Lasciatemi provare a rendere il problema il più trasparente possibile. Aggiungo uno StyleBook e imposta la sua Risorsa su MetropolisUIGreen.Style nella directory Style di Delphi (in XE7 si trova in C: \ Users \ Public \ Documents \ Embarcadero \ Studio \ 16.0 \ Styles). Quindi apro FireMonkey Style Designer e localizzo lo stile buttonstyle, che consiste in un TButtonStyleObject e un TButtonStyleTextObject, entrambi associati a un TLayout. TButtonStyleObject ha un valore di proprietà SourceLookup di MetroGreenstyle.png, che è uno StyleName associato a una TImage in cui è stata caricata l'immagine MetropolisUIGreen.png.

Con TButtonStyleObject (di cui StyleName è background) selezionato, si esamina la proprietà NormalLink, che è una raccolta di TBitmapLinks. È a mia conoscenza che l'unico BitmapLink che vedo definito in NormalLink contiene informazioni sulla bitmap che dovrebbe essere utilizzata per il pulsante, incluse le coordinate (SourceRect) corrispondenti a una regione rettangolare del file MetroGreenstyle.png.

Le mie supposizioni sembrano essere errate, perché quando esamino MetroGreenstyle.png utilizzando un programma di grafica, non c'è nulla di interessante in queste coordinate. Ho esaminato i BitmapLinks di molti altri stili, e anche lì trovo che le coordinate di SourceRect non sembrano effettivamente definire una regione significativa del file png di stylelookup.

Ovviamente ho sbagliato. In che modo le coordinate SourceRect di un BitmapLink definiscono la bitmap che FireMonkey dovrebbe utilizzare durante il rendering di un controllo.

- Modifica Ho effettivamente chiesto quattro domande. Ho aggiornato questa domanda per includere solo una domanda. Includerò le altre domande in un altro post. -

risposta

4

Penso che ci sia una differenza tra la bitmap incorporata nel file .style (incorporato come risorsa) e quella memorizzata nel file (C: \ Users \ Public \ Documents \ Embarcadero \ Studio \ 15.0 \ Stili \ MetropolisUIGreen.png, ovvero 519x760).

La bitmap incorporata sembra essere di dimensioni diverse rispetto al file esterno (è possibile verificarlo guardando nell'Editor di stile, selezionando il nodo metrogreenstyle.png, aprendo l'editor di proprietà per MultiResBitmap e guardando le dimensioni dell'immagine fornite per scala 1.00:. 750x850

Questo spiega perché le coordinate sembra tutto sbagliato non so se è il file esterno per essere aggiornati o il contrario

HTH

Aggiornamento:..! I riuscito a estrarre la bitmap memorizzata nel file .style e posso confermare che le coordinate sono relative vivo per quella bitmap!

Update (2): file .style e file di .fmx sono molto simili in modo da poter fare:

1) MetropolisUIGreen aperta.Stile con un editor di testo e individuare il bitmap incorporata (linea 18), si può vedere:

object TImage 
    StyleName = 'MetroGreenstyle.png' 
    MultiResBitmap = < 
     item 
     Width = 0 
     Height = 0 
     PNG = {...} 

2) creare una nuova applicazione FMX, aggiungere un TImage sul modulo e caricare una bitmap (qualsiasi immagine che si desidera)

3) copiare il valore PNG dal file .Style nel file XFM. Attenzione anche per fissare le proprietà width e height:

MultiResBitmap = < 
    item 
    Width = 750 
    Height = 850 
    PNG = {...} 

4) si dovrebbe essere in grado di vedere l'immagine in fase di progettazione;

5) aggiungere un pulsante con Image1.Bitmap.SaveToFile ('C: \ temp \ new_file.png'); avvia il programma e salva il file sul tuo disco. :-)

+0

Ciao, Andrea. Grazie per l'impegno. Devo verificare la risposta prima di contrassegnare la risposta come corretta. Come hai estratto la bitmap memorizzata nel file .style? –

+0

Ho modificato la risposta a causa del limite di lunghezza di un commento ... – AndreaMagni

+0

Andrea, questo è semplicemente fantastico. Grazie ancora per il tuo contributo. –

0

Vorrei verificare la soluzione di Andreas. Questo è quello che ho fatto.

  1. esportato il .png come Andrea descritto
  2. aperto il .png in Photoshop e ha cambiato alcuni dei vari oggetti
  3. salvato il .png da Photoshop
  4. Loaded nel progetto temperatura TImage ho usato esportarlo al punto 1.
  5. Alt + F12 e copiate il contenuto png negli appunti
  6. incollato direttamente nel mio file .style (con Ultraedit)
  7. Caricato il file .style nell'editor di stile in Delphi

Tutti i cambiamenti di colore si sono riflessi immediatamente nel mio progetto. Forse c'è un modo più semplice, ma io non lo so. L'ho fatto in XE10 Seattle.