AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTabControl, XP-Style, OwnerDraw

Ein Thema von EConvertError · begonnen am 1. Okt 2006 · letzter Beitrag vom 13. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#1

TTabControl, XP-Style, OwnerDraw

  Alt 1. Okt 2006, 20:18
Hallo!

Ich verwende ein TTabControl mit XP-Style.
Jetzt möchte ich hinter einige Labels (die tabellenförmig angeordnet sind) mit FillRect() einen Hintergrund malen. Stelle ich ich die OwnerDraw-Property auf true, funktioniert das auch, aber das TabControl wird ohne XP-Style gemalt. Gezeichnet wird im OnDraw-Ereignis.

Die Zeichenoperation in MainForm.OnPain zu verschieben hat ebenfalls nicht zum gewünschten Erfolg geführt, da dann zwar das TabControl noch mit XP-Style gezeichnet wurde, meine Zeichenbefehle aber ignoriert wurden.

Hier [codeproject] wird zwar eine Lösung angeboten, aber ich bin der Sprache C++ leider nicht so mächtig. Vielleicht kann da jemand helfen oder hat eine andere Lösung...

Vielen Dank,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#2

Re: TTabControl, XP-Style, OwnerDraw

  Alt 3. Okt 2006, 16:26
Keiner eine Idee, wie man OwnerDraw gemeinsam mit XP-Style verwenden könnte?
Andreas N.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#3

Re: TTabControl, XP-Style, OwnerDraw

  Alt 3. Okt 2006, 16:44
Zitat von EConvertError:
Die Zeichenoperation in MainForm.OnPain zu verschieben hat ebenfalls nicht zum gewünschten Erfolg geführt, da dann zwar das TabControl noch mit XP-Style gezeichnet wurde, meine Zeichenbefehle aber ignoriert wurden.
Sicher? Vielleicht mußt du nur stattdessen WM_ERASEBKGND überschreiben nicht WM_PAINT?!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

Re: TTabControl, XP-Style, OwnerDraw

  Alt 3. Okt 2006, 16:48
Zitat von EConvertError:
Keiner eine Idee, wie man OwnerDraw gemeinsam mit XP-Style verwenden könnte?
Wie der Name schon sagt OwnerDraw
Der Programmiere zeichnet selbst oder bestimmt was an x,y position geschieht.
Wenn du das Property einschaltest wird die interne Draw funktion des Control ausgeschaltet.

Was bedeutet wirds es eingeschaltet mußt du selbst dafür sorgen was dort gezeichnet wird
das schließ den XP-Style mit ein.

Das von dir gezeigte Sample macht nichts anderes.
Es stellt den container für die eigens kreierten Drawfunktionen dar.

Gruß
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#5

Re: TTabControl, XP-Style, OwnerDraw

  Alt 4. Okt 2006, 19:57
Vielen Dank!

Ich weiß wirklich nicht, was ich diesmal anders gemacht habe, als zuvor, aber jetzt zeichnet er auch, wenn es im OnPaint-Event passiert. Ich versteh die Welt nicht mehr.

Mein Code:
Delphi-Quellcode:
procedure TfrmMain.FormPaint(Sender: TObject);
var
  ARect: TRect;
begin
  with AdapterTabControl.Canvas do
  begin
    ARect.TopLeft := CurrentRateLabel.BoundsRect.TopLeft; //die beiden labels befinden
    ARect.BottomRight := CurrentUploadLabel.BoundsRect.BottomRight; //sich in einer "Zeile"

    Brush.Style := bsClear;
    Brush.Color := clSkyBlue;

    FillRect(ARect); //Sollte eigentlich hinter den Labels malen, nicht sie übermalen
  end;
end;
Leider gibt es noch ein Problem: Obiger Code übermalt die Labels anstatt ihnen einen Hintergrund zu verpassen. Dies geschieht auch, wenn ich OwnerDraw aktiviere und im dementsprechenden Event male.

Wisst ihr diesbezüglich Rat?

Zitat:
Wie der Name schon sagt OwnerDraw
Der Programmiere zeichnet selbst oder bestimmt was an x,y position geschieht.
Wenn du das Property einschaltest wird die interne Draw funktion des Control ausgeschaltet.
Dem stimme ich grundsätzlich zu, aber da ich nicht das gesamte Control selbst zeichnen muss, war es für mich nicht ersichtlich, dass auch der XP-Style abgeschaltet wird.

Hoffentlich wisst ihr eine Lösung,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#6

Re: TTabControl, XP-Style, OwnerDraw

  Alt 5. Okt 2006, 20:10
Niemand eine Idee?
Andreas N.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#7

Re: TTabControl, XP-Style, OwnerDraw

  Alt 6. Okt 2006, 01:06
Zitat von EConvertError:
Niemand eine Idee?
Also Labels sind mal grundsätzlich keine Fenster, haben also weder eigenes Handle noch eigene Fensterfunktion. Entsprechend muß die Verarbeitung in der Fensterfunktion des Forms geschehen. Eine Methode wäre also alle TLabel durch TStatic zu ersetzen ...

... andererseits kannst du die Ursprungsfunktion ja malen lassen und hängst dich einfach dahinter.
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#8

Re: TTabControl, XP-Style, OwnerDraw

  Alt 6. Okt 2006, 18:35
Also Labels sind mal grundsätzlich keine Fenster, haben also weder eigenes Handle noch eigene Fensterfunktion. Entsprechend muß die Verarbeitung in der Fensterfunktion des Forms geschehen. Eine Methode wäre also alle TLabel durch TStatic zu ersetzen ... Die Verarbeitung im OnPaint-Event ist eigentlich ok für mich, aber die Labels werden übermalt und sind gar nicht mehr zu sehen. Ich will aber nur einen Hintergrund zu den Labels malen.

Zitat:
.. andererseits kannst du die Ursprungsfunktion ja malen lassen und hängst dich einfach dahinter.
Ich verstehe nicht ganz, was du damit meinst?

Wenn du Überschreiben der Paint Methode in Verbindung mit einer neuen Komponenten meinst, so sieht es hierbei nicht so gut aus, denn der Hintergrund soll sich ja über mehrere Labels erstrecken.

Wenn es gar keine andere Möglichkeit gibt, werde ich allerdings einmal ein Control schreiben, das meine tabellenförmig angeordneten Labels erstetzt. Aber eben erst irgendwann einmal...
Deshalb wäre ich froh, wenn es eine einfachere Lösung gibt.

Vielen Dank,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#9

Re: TTabControl, XP-Style, OwnerDraw

  Alt 6. Okt 2006, 20:35
Zitat von EConvertError:
Zitat von Olli:
Also Labels sind mal grundsätzlich keine Fenster, haben also weder eigenes Handle noch eigene Fensterfunktion. Entsprechend muß die Verarbeitung in der Fensterfunktion des Forms geschehen. Eine Methode wäre also alle TLabel durch TStatic zu ersetzen ...
Die Verarbeitung im OnPaint-Event ist eigentlich ok für mich, aber die Labels werden übermalt und sind gar nicht mehr zu sehen. Ich will aber nur einen Hintergrund zu den Labels malen.
... und genau deshalb schlug ich vor, daß du den Hintergrund dann malst wenn er gemalt werden sollte, nämlich im Erase-Event. Siehe oben!
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#10

Re: TTabControl, XP-Style, OwnerDraw

  Alt 8. Okt 2006, 19:23
Die Verarbeitung im Erase-Event funktioniert leider ebenfalls nicht.
Mein Code:
Delphi-Quellcode:
procedure TfrmMain.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
var
  ARect: TRect;
begin
 with AdapterTabControl.Canvas do
  begin
    ARect.TopLeft := CurrentRateLabel.BoundsRect.TopLeft;
    ARect.BottomRight := CurrentUploadLabel.BoundsRect.BottomRight;

    Brush.Style := bsClear;
    Brush.Color := clSkyBlue;

    FillRect(ARect);
  end;
Die Labels werden trotzdem einfach übermalt (außer wenn man die Größe der Form verändert, danach aber wieder das -leider- gewohnte Bild der übermalten Labels).

Andreas
Andreas N.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz