AGB  ·  Datenschutz  ·  Impressum  







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

Hint mit Grafik

Ein Thema von Andy · begonnen am 13. Jul 2004 · letzter Beitrag vom 20. Jul 2004
Antwort Antwort
Andy

Registriert seit: 30. Jan 2004
17 Beiträge
 
Delphi 5 Enterprise
 
#1

Hint mit Grafik

  Alt 13. Jul 2004, 12:02
Hallo,

kann man in einem Hintfenster ein .jpg oder .bmp Bild zusätzlich zum Text darstellen?
Bisher konnte ich nur in Erfahrung bringen, dass es ein THintWindow und eine HintWindowClass gibt. In der Delphi Hilfe heisst es

Zitat:
... Wenn Sie THintWindow überschreiben und einen neuen Typ abgeleitet haben, weisen Sie diesen neuen Typ beim Start der Anwendung der globalen Variable HintWindowClass zu. Von diesem Zeitpunkt an wird der neue Fenstertyp für Hinweisfenster verwendet. ...
Wie geht das in der Praxis mit dem neuen Fenstertyp? Kann ich z.B. als Fenstertyp eine Form verwenden, in die ich dann mein Bild zeichne?

Schöne Grüsse
Andy
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: Hint mit Grafik

  Alt 13. Jul 2004, 12:53
Hier mal ein älteres Beispiel, welches ich habe.

Delphi-Quellcode:
{
  Copyright:      Copyright © 2002-2004 gate(n)etwork GmbH. Alle Rechte vorbehalten.
  Author:        Daniel Wischnewski
  State:          Public Domain, only for Delphi-PRAXiS Group
  Remarks:        this Copyright must be included
  Version:        Delphi 2-7
  Description:    Creates a custom hint window

* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}


unit uCustomHint;

interface

uses
  Classes, Windows, Forms, Graphics, Controls, Types;

type
  TGraphicHintWindow = class(THintWindow)
  private
    FActivating: Boolean;
  public
    procedure ActivateHint(Rect: TRect; const AHint: string); override;
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    property Caption;
  end;

var
  CurrentHintImage: String;

const
  BMP_SPACE = 30;

implementation

{ TGraphicHintWindow }

procedure TGraphicHintWindow.ActivateHint(Rect: TRect;
  const AHint: string);
begin
  FActivating := True;
  try
    Caption := AHint;
    Inc(Rect.Bottom, 16);
    Rect.Right := Rect.Right + BMP_SPACE;
    UpdateBoundsRect(Rect);
    // calc screen position
    if Rect.Top + Height > Screen.ActiveForm.Monitor.WorkareaRect.Bottom then
      Rect.Top := Screen.ActiveForm.Monitor.WorkareaRect.Bottom - Height;
    if Rect.Left + Width > Screen.ActiveForm.Monitor.WorkareaRect.Right then
      Rect.Left := Screen.ActiveForm.Monitor.WorkareaRect.Right - Width;
    if Rect.Left < Screen.ActiveForm.Monitor.WorkareaRect.Left then
      Rect.Left := Screen.ActiveForm.Monitor.WorkareaRect.Left;
    if Rect.Bottom < Screen.ActiveForm.Monitor.WorkareaRect.Top then
      Rect.Bottom := Screen.ActiveForm.Monitor.WorkareaRect.Top;
    // set new position
    SetWindowPos(Handle, HWND_TOPMOST, Rect.Left, Rect.Top, Width, Height,
      SWP_SHOWWINDOW or SWP_NOACTIVATE);
    // redraw
    Invalidate;
  finally
    FActivating := False;
  end;
end;

constructor TGraphicHintWindow.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  with Canvas.Font do
    Color := clBlack;
end;

procedure TGraphicHintWindow.Paint;
var
  R: TRect;
  Bmp: TBitmap;
begin
  R := ClientRect;
  Inc(R.Left, 2);
  Inc(R.Top, 2);
  // draw left corner
  Bmp := TBitmap.Create;
  try
    try
      with Canvas do
      begin
        Brush.Style := bsSolid;
        Brush.Color := clSkyBlue;
        Pen.Color := clGray;
        Rectangle(0, 0, BMP_SPACE, R.Bottom + 1);
        Bmp.LoadfromFile(CurrentHintImage);
        Draw(4, Succ((R.Bottom - Bmp.Height) div 2), Bmp);
      end;
    except
    end;
  finally
    Bmp.Free;
  end;
  Color := clWhite;
  // draw text
  Canvas.Brush.Style := bsClear;
  Canvas.TextOut(Succ(BMP_SPACE), (R.Bottom div 2) - (Canvas.Textheight(Caption)
      div 2), Caption);
end;

initialization
  CurrentHintImage := '';

end.
Setzen der Zu nutzenden Klasse mit (zB. in OnFormCreate): HintWindowClass := TGraphicHintWindow; Im Beispiel-Code einfach die Variable CurrentHintImage auf die Bilddatei verweisen lassen und nutzen

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Andy

Registriert seit: 30. Jan 2004
17 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Hint mit Grafik

  Alt 15. Jul 2004, 06:39
Guten Morgen,

sorry für die verspätete Antwort.
Danke für den Source Code, hab ihn gerade getestet und es klappt super.

Schöne Grüsse
Andy
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.051 Beiträge
 
Delphi 12 Athens
 
#4

Re: Hint mit Grafik

  Alt 15. Jul 2004, 18:04
Ist ja gemein ich hatte mir das ja mal selber über die Delphi-Sources rausgesucht und dann gibst das auch schon fertig
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#5

Re: Hint mit Grafik

  Alt 20. Jul 2004, 15:28
Hallo,

ich habe versucht den Quelltext auszuprobieren, doch leider ohne Erfolg.
In der USES Klausel steht die unit "TYPES" drin welche bei mir nicht gefunden werden
kann... ich arbeite mit Delphi 4 doch laut Beschreibung soll es auch damit gehen.

Hat jemand einen Tip?

MfG Schucki...
Frank
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6

Re: Hint mit Grafik

  Alt 20. Jul 2004, 15:30
Zitat von Schucki:
In der USES Klausel steht die unit "TYPES" drin welche bei mir nicht gefunden werden kann...
Vielleicht weil es die Unit in Delphi 4 noch nicht gab Einfach entfernen und testen...

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#7

Re: Hint mit Grafik

  Alt 20. Jul 2004, 20:03
Hi Sakura,

ja klar hab ich probiert... leider stolpert er dann in der Zeile...

Code:
if Rect.Top + Height > Screen.ActiveForm.Monitor.WorkareaRect.Bottom then
und "WorkareaRect" kennt er nicht...

Nun haste noch nen Tip?

MfG Schucki...
Frank
  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 14:39 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