Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Graphischer Hint mit eigenen Bitmap (https://www.delphipraxis.net/113574-graphischer-hint-mit-eigenen-bitmap.html)

Schwedenbitter 18. Sep 2008 12:55

Re: Graphischer Hint mit eigenen Bitmap
 
@Helmi
Zuerst mal danke für den Hinweis.
Vermutlich war es gestern Abend/heute Morgen wohl doch etwas zu spät. Ich habe jetzt den Quellcode aus 2 Komponenten übernommen, die sich auch mit Grafik beschäftigen. Dort wird jeweils nur eine Methode für das Schreiben des TPicture angelegt. Das Lesen geht irgendwie auch so.
Ich behaupte nicht, es verstanden zu haben. Aber es funktioniert so:
Delphi-Quellcode:
Type
   THHint   = Class(TComponent)
               private
                  Screensize   : Integer;
                  Factive      : Boolean;       // Aktiv
                  Fseparator   : Char;          // Normaler Separator
                  FGraphicTag   : String;       // Grafik-TAG
                  FPicture   : TPicture;       // Grafik
                  FOnShowHint   : TShowHintEvent;// Anzeigen des Hint
               Protected
                  // Aktiv
                  Function GetActive:boolean;
                  Procedure SetActive(IsActive:Boolean);
                  // Normaler Separator
                  Function GetSeparator:Char;
                  Procedure SetSeparator(IsSep:Char);
                  // Grafik-TAG
                  Function GetGraphicTag:String;
                  Procedure SetGraphicTag(IsGraphTag:String);
                  // Grafik
                  Procedure SetPicture(IsGraphic:TPicture);
                  // Procedure zum Anzeigen des Hint
                  Procedure NewHintInfo(Var HintStr   : String;
                                        Var CanShow   : Boolean;
                                        Var HintInfo   : THintInfo);
               Public
                  Constructor Create(AOwner:Tcomponent);Override;
               Published
                  Property Active: Boolean Read GetActive Write SetActive;
                  Property Separator: Char Read GetSeparator Write SetSeparator;
                  Property GraphicTag: String Read GetGraphicTag Write SetGraphicTag;
                  Property Picture: TPicture Read FPicture Write SetPicture;
              End;
und hier die Methoden:

Delphi-Quellcode:
// Grafik
Procedure THHint.SetPicture(IsGraphic: TPicture);
Begin
  FPicture.Assign(IsGraphic);
End;
So dürfte es auch kein Speicherleck mehr geben, oder? Das Bild bekomme ich jedenfalls zurück. Ich mache mich dann mal (bei Gelegenheit) an das Bauen der Bildausgabe.

Nebenfrage: Warum werden manche Methoden zum Lesen beschrieben und andere nicht bzw. wonach richtet sich die Notwendigkeit? Ich nehme gern auch Links zum Nachlesen.

Gruß, Alex

Schwedenbitter 18. Sep 2008 17:27

Re: Graphischer Hint mit eigenen Bitmap
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bekomme kein Bitmap zu sehen :wall:

Ich hatte zunächst gesehen, dass der von mir veränderte Quellcode THHint zunächst von TComponent abgeleitet hat.
Letzteres kann aber von Hause aus nicht per Canvas zeichnen. Deshalb habe ich dann wie im Beispielcode die Ableitung von THintWindow vorgenommen.

Ich war deshalb davon ausgegangen, dass mein Problem vom Constructor her rührt
Delphi-Quellcode:
Constructor Create(AOwner: TComponent); Override;
Der ist aber im Beispielcode auch so; und er funktioniert. Der Compiler meckert ja auch nicht rum, das auf die Eigenschaft Canvas nicht zugegriffen werden könne.

Ich habe mir einen zusätzlichen Button auf das Formular gelegt. Beim Click wird mittels Canvas das Bild in THHint auf das Formular gemalt. Das klappt und ich habe den Code 1:1 in die Komponente übernommen.

Warum klappt es dort nicht mehr?

[edit]
Dateianhang vergessen!
[/edit]

Schwedenbitter 19. Sep 2008 11:44

Re: Graphischer Hint mit eigenen Bitmap
 
Ich bin jetzt schon soweit, dass ich die Ausgabe der Grafik hinbekomme, wobei FRect und Picture Eigenschaften der Komponente sind:
Delphi-Quellcode:
Var
   DesktopDC      : HDC;           // Handle auf irgendeinen Desktop
   DesktopCanvas   : TControlCanvas;// Leinwand zum Malen
   ...
Begin
   ...
         DesktopDC:=GetDC(0);
         If DesktopDC<>0 Then
         Try
            DesktopCanvas:=TControlCanvas.Create;
            Try
               DesktopCanvas.Handle:=DesktopDC;
               DesktopCanvas.Draw(FRect.Left,FRect.Top,Picture.Bitmap);
            Finally
               DesktopCanvas.Free;                  End;
         Finally
            ReleaseDC(0, DesktopDC);
         End;
Ich weiß zwar, wie ich den Bereich unter dem Bitmap wieder in den ursprünglichen Zustand zurückversetzen kann. Leider gibt es bei TApplication kein Ereignis wie z.B. OnHideHint. Die Procedure HideHint bringt mich nicht weiter. Ich möchte auch nicht TApplication ändern und um ein Ereignis erweitern...

Gibt es eine Möglichkeit herauszubekommen, wann der Hint wieder ausgeblendet werden muss?
Ich bin so kurz vor dem Ziel :|

Bei Bedarf gebe ich den Quelltext wieder mit. Ich habe aber Angst verhauden zu werden, wenn ich zig Versionen meines Programm hier einstelle...


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz