bağlı aşağıdaki ikisi gibi bir ProgressBar
kontrole sahip. Gördüğünüz gibi, ikincisinin sadece bir tane 0 var, iki tane olması gerekiyor ama diğeri görülemiyor çünkü ProgressBar'ın ForeColor
'u TextColor
ile aynı. Aşağıdaki resimde ProgressBar
Kireç içinde boyandığında ve arka plan siyahken kireçteki metni boyadığında metni siyah olarak boyamanın bir yolu var mı?ters çevir Metin Rengi BackColor
cevap
Önce arka plan ve metin çizebilir, sonra arka plan çizim ile ön plan çizim birleştirmek PATINVERT
parametresi PatBlt
yöntemi kullanarak ön plan kireç dikdörtgen çizin:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class MyProgressBar : Control
{
public MyProgressBar()
{
DoubleBuffered = true;
Minimum = 0; Maximum = 100; Value = 50;
}
public int Minimum { get; set; }
public int Maximum { get; set; }
public int Value { get; set; }
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Draw(e.Graphics);
}
private void Draw(Graphics g)
{
var r = this.ClientRectangle;
using (var b = new SolidBrush(this.BackColor))
g.FillRectangle(b, r);
TextRenderer.DrawText(g, this.Value.ToString(), this.Font, r, this.ForeColor);
var hdc = g.GetHdc();
var c = this.ForeColor;
var hbrush = CreateSolidBrush(((c.R | (c.G << 8)) | (c.B << 16)));
var phbrush = SelectObject(hdc, hbrush);
PatBlt(hdc, r.Left, r.Y, (Value * r.Width/Maximum), r.Height, PATINVERT);
SelectObject(hdc, phbrush);
DeleteObject(hbrush);
g.ReleaseHdc(hdc);
}
public const int PATINVERT = 0x005A0049;
[DllImport("gdi32.dll")]
public static extern bool PatBlt(IntPtr hdc, int nXLeft, int nYLeft,
int nWidth, int nHeight, int dwRop);
[DllImport("gdi32.dll")]
public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);
[DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
public static extern bool DeleteObject(IntPtr hObject);
[DllImport("gdi32.dll")]
public static extern IntPtr CreateSolidBrush(int crColor);
}
Not: Kontroller sadece boya mantığını göstermek içindir. Gerçek bir dünya uygulaması için, Minimum
, Maximum
ve Value
özelliklerinde bazı doğrulama eklemeniz gerekir.
Nice one! Eski günlerdeki gibi hissediyor .. – TaW
Tam olarak ihtiyacım olan şey bu! Teşekkür ederim! –
Rica ederim :) –
- 1. Göstergenin sırasını ters çevir
- 2. PHP Ters Çevir/Olumsuz Rejeks Düzeni
- 3. Bir ip dizisini ters çevir (basit soru)
- 4. Visiblox grafiğinde lineer ekseni ters çevir
- 5. Django, sınıf tabanlı bir görünümle parametreleri ters çevir
- 6. Java, bir kavanoza ASM ile tüm dizgileri ters çevir
- 7. Metin Rengi Eşleşecek Varsayılan UBUTton Rengi [Mavi]
- 8. Ayar Hücre Metin Rengi
- 9. Küme metin rengi Android
- 10. UWP Çini Metin Rengi
- 11. Geri Yükleme C# Windows Forms backcolor
- 12. Bir progressbar backcolor için şeffaf c yapın. #
- 13. Metin görünümündeki metin rengi nasıl alınır?
- 14. Tersine çevir ve dize
- 15. JButton'un metin rengi nasıl değiştirilir
- 16. Metin alanında temizle düğmesi rengi
- 17. MATLAB: GUI'de Metin Arkaplanının rengi
- 18. Değişim çarparak geçme metin rengi
- 19. Android seçim faaliyeti metin rengi
- 20. Metin değiştirmeField kenarlığı rengi iOS
- 21. Değiştirmek iletişim metin rengi 5.0+
- 22. Plone - TinyMCE düzenleyicisinde çalışmayan metin rengi ve arka plan rengi
- 23. Tüm Metin satırlarını Ters Metinle değiştir
- 24. Sezaryen ve ters metin programı ile sorun
- 25. BeginPath TextOut EndPath burada ters metin
- 26. Flash Mesajı Çevir
- 27. $ a çevir Numeric
- 28. NSString'i tamsayıya çevir
- 29. xsl dönüştür/çevir şablonu
- 30. FOSUserBundle Rota yolunu çevir
Bu ilerleme çubuğu nedir? Yerleşik mi yoksa bazı özel veya üçüncü taraf kontrolü kullanıyor musunuz? – vendettamit
@vendettamit Üzgünüz, belirtmeyi unuttuysanız, https://www.codeproject.com/tips/645899/csharp-alternative-progressbar kullanıyorum –
Metin bir parçaysa, bitmap kullanmazsanız mümkün olmaz ve pikselleri değiştir. Eğer iki bölüm halinde bölebilirseniz, bölmenin karakterleri bölmek için gerekip gerekmediğine karar vermeniz gerekecektir. Hiçbir şekilde tam olarak kolay değil. Oh ama eski xor-ing çekme modları için .. Gördüğüm tek ucuz ve kolay bir çözüm, renk üzerinde uzlaşma ve bar ve metin için aynı (parlaklık) seçim değil .. – TaW