2012-07-21 7 views
9

In altri linguaggi come il C++, ci sono operatori che eseguono un tipo di operazione più-uguale o uguale a per aggiungere altri stili/flag. Esiste un equivalente in Delphi?Qual è l'equivalente di Delphi a "+ =" per aggiungere elementi a un set?

In questo momento ho un po 'di codice come:

label1.Font.Style := label1.Font.Style + [fsBold]; 
label2.Font.Style := label2.Font.Style + [fsBold]; 

ma mi piacerebbe, se è possibile, per ottenere che semplificato un po' a qualcosa di più conciso senza duplicare il nome dell'etichetta su entrambi i lati l'assegnazione operatore, qualcosa sulla falsariga di: label1.Font.Style += [fsBold]; o label1.Font.Style := self + [fsBold];

Questo può essere fatto? O non così tanto?

+0

utilizzare la funzione "inc" - http://docwiki.embarcadero.com/Libraries/en/System.Inc. Ad ogni modo non puoi usarlo sulle proprietà. – RBA

+4

Per i set, non sarebbe Inc, sarebbe la [Procedura di inclusione] (http://docwiki.embarcadero.com/Libraries/en/System.Include) con lo stesso problema che richiede una variabile. – hvd

+0

Per le stringhe, usare 'Concat (S1, S2, S3, S4 ...)' –

risposta

8

Questo è uno dei pochi casi in cui posso consigliare il with dichiarazione:

with label1.Font do Style := Style + [fsBold]; 
with label2.Font do Style := Style + [fsBold]; 

Normalmente, il problema con with è che non è chiaro che cosa è un accesso membri e ciò che non lo è, ma se la scope è una singola istruzione in cui viene utilizzata una singola proprietà, è abbastanza chiara.

11

Delphi ha la funzione Inc, ma non funziona sulle proprietà:

Inc(a);  // Increment a with 1 
Inc(a, 5); // Increment a with 5 

Se avete bisogno di aggiungere stile a un carattere spesso, è possibile scrivere una procedura:

procedure AddStyle(const AFont: TFont; const AStyle: TFontStyles); 
begin 
    AFont.Style := AFont.Style + AStyle; 
end; 

(Con le versioni successive di Delphi puoi usare gli helper della classe).

+3

+1, E ho appena aggiustato il metodo AddStyle :), inoltre è possibile aggiungere un sanple di utilizzo in questo modo ' AddStyle (Label1.Font, [fsBold]); ' – RRUZ

+0

Grazie per la correzione ;-). –

0

sottoclasse TLabel tipo e creare un metodo come questo:

procedure TMyLabel.AddStyle(const AStyle: TFontStyles); 
begin 
Self.Font.Style := Self.Font.Style + AStyle; 
end; 

allora si può mettere la classe in un pacchetto bpl e installarlo sul proprio editor. Dopodiché puoi sostituire tutte le etichette con le etichette personalizzate. Per il progetto di grandi dimensioni, suggerirei Notepad ++ per sostituire tutte le dichiarazioni in .pas e (testo!) .dfm file. Questo può sembrare complicato ma è meno di un'ora di lavoro. In bocca al lupo!

+0

non farlo, il complesso che introduci nel codice è quindi meritevole del lavoro extra.fallo in uno schema di visitatore, (crea una funzione esterna che accetti TLabel e TFontStyles e svolga il lavoro in una funzione). – none

+0

Questo è probabilmente uno dei peggiori motivi possibili per creare una sottoclasse. Una semplice funzione di utilità fa il lavoro abbastanza bene, senza interferire con la tua gerarchia di classi. –

13

Include è quello che stai cercando. Sfortunatamente si incontra il problema che Label.Font.Style è una proprietà e deve essere assegnata a var e non passata. È tuttavia possibile effettuare questa operazione:

var 
    fontStyle: TFontStyles; 
begin 
    fontStyle := Label1.Font.Style; 
    Include(fontStyle, fsBold); 
    Label1.Font.Style := fontStyle;