AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TForm Komponente ist schwarz wenn XPManifest verwende wird
Thema durchsuchen
Ansicht
Themen-Optionen

TForm Komponente ist schwarz wenn XPManifest verwende wird

Ein Thema von Ares · begonnen am 28. Okt 2008 · letzter Beitrag vom 28. Okt 2008
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

TForm Komponente ist schwarz wenn XPManifest verwende wird

  Alt 28. Okt 2008, 15:17
Hallo!

Ich bastel gerade an einer Eigenen Komponente, die quasi wie ein Hint funktionieren soll. Es geht um ein Image, wenn man mit der Maus darüber ist soll ein Hint-Fenster angezeigt werden. Der Hint soll recht viele Informationen strukturiert darstellen und nur für diese Komponente gelten. Daher verwende ich keinen echten Hint da sich die Informationen hier nur schlecht strukturieren lassen und für die gesamte Anwendung nur eine Hintklasse genutzt werden kann.

Ich habe mir also eine Klasse TMyHint erstellt, die ein Fenster mit den Informationen erstellt und anzeigt solange der Der Cursor über dem Image ist:

Der Hint:
Delphi-Quellcode:
type
  TMyHintForm = class(TForm)
    // Alle möglichen Komponenten für die Anzeige der Informationen
  end;

  TMyHint = class(TObject)
  protected
    FHintForm: TMyHintForm;
  public
    constructor Create(Infos: TMyHintInfos);
    procedure Show;
    procedure UpdatePos;
    procedure Hide;
  end;

implementation

constructor TMyHint.Create(Infos: TMyHintInfos);
var i: integer;
begin
  FHintForm := TMyHintForm .Create(nil);
  FHintForm.DoubleBuffered := true;

  for i:=0 to FHintForm.ComponentCount-1 do begin
    if (FHintForm.Components[i] is TWinControl) then
      TWinControl(FHintForm.Components[i]).DoubleBuffered := true
  end;

  // Informationen darstellen
  InfosDarstellen(Infos);
  ...
end;

procedure TMyHint.Hide;
begin
  FHintForm.Hide;
end;

procedure TMyHint.UpdatePos;
begin
  FHintForm.Top := Mouse.CursorPos.Y;
  FHintForm.Left := Mouse.CursorPos.X;
end;

procedure TMyHint.Show;
begin
  FHintForm.Top := Mouse.CursorPos.Y;
  FHintForm.Left := Mouse.CursorPos.X;
  FHintForm.Show;
end;

Das Image, dass den Hint anzeigen soll
Delphi-Quellcode:
type
  TMyHintImage = class(TImage)
  protected
    FMyHint : TMyHint;
    FTimer : TTimer;

    procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

    procedure TimerEvent(Sender: TObject);
  public
    constructor Create(AOwner: TComponent); override;
  end;

implementation

constructor TMyHintImage.Create(AOwner: TComponent);
begin
  inherited;

  FTimer := TTimer.Create(self);
  FTimer.Enabled := false;
  FTimer.OnTimer := TimerEvent;
end;

procedure TMyHintImage.TimerEvent(Sender: TObject);
begin
  FMyHint := TMyHint.Create(SomeInfos);
  FMyHint.Show;

  FTimer.Enabled := false;
  FTimer.Interval := 10000;
  FTimer.Enabled := true;
end;

procedure TMyHintImage.CMMouseEnter(var Message: TMessage);
begin
  inherited;
  FTimer.Interval := 1000;
  FTimer.Enabled := true;
end;

procedure TMyHintImage.CMMouseLeave(var Message: TMessage);
begin
  FTimer.Enabled := false;

  if (FMyHint<> nil) then begin
    FMyHint.Hide;
    FreeAndNil(FMyHint);
  end;

  inherited;
end;

procedure TMyHintImage.WMMouseMove(var Message: TWMMouseMove);
begin
  inherited;
  if (FMyHint<> nil) then FMyHint.UpdatePos;
end;

Das funktioniert alles ganz wunderbar. Wenn ich ein TMyHintImage auf einem Form platziere, das Programm starte und die Maus 1 Sekunde über da Image halte wird das Hint Fenster mit den Informationen angezeigt. Bewege ich die Maus wird die Position des Hintfensters angepasst. Alles so wie es sein sollte.

Wenn ich das Ganze aber auf einem Form verwende auf dem auch das XPManifest genutzt wird, erscheint das Hint Fenster nur noch als schwarzes Rechteck. Alles funktioniert wie zuvor, nur dass in dem Hintfenster keine Informationen mehr zu sehen sind, weil eben alles Schwarz ist.

Was mache ich hier falsch? Wie lässt sich das umgehen?

Besten Dank
Ares
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TForm Komponente ist schwarz wenn XPManifest verwende wi

  Alt 28. Okt 2008, 20:40
Hatten wir nicht schon mal so ein Problem mit einer Toolbar? Eventuell hat es ja den gleichen Grund.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:28 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