AGB  ·  Datenschutz  ·  Impressum  







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

Graphischer Hint mit eigenen Bitmap

Ein Thema von Helmi · begonnen am 10. Mai 2008 · letzter Beitrag vom 19. Sep 2008
Antwort Antwort
Seite 2 von 2     12   
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Graphischer Hint mit eigenen Bitmap

  Alt 18. Sep 2008, 12:55
@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
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Graphischer Hint mit eigenen Bitmap

  Alt 18. Sep 2008, 17:27
Ich bekomme kein Bitmap zu sehen

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
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]
Angehängte Dateien
Dateityp: zip thhint_152.zip (56,6 KB, 15x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Graphischer Hint mit eigenen Bitmap

  Alt 19. Sep 2008, 11:44
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...
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:10 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