Autor Beitrag
Schakal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Mi 11.02.04 20:24 
frage :D
ich hab nen image in meiner form, der als button dienen soll. wenn ich mit der maus drübergehe soll das picture des image geändert werden, dsa picture ist in einem verzeichnis.

wie mach ich dsa jetzt, das er das picture aus dem verzeichnis ladet?
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Mi 11.02.04 21:19 
Schreib in das OnMouseMove Ereignis der Image
ausblenden Delphi-Quelltext
1:
Image1.Picture.LoadFromFile('C:\Grafik.bmp');					


wenn du eine JPG datei laden willst solltest du noch folgendes bei uses eintragen

ausblenden Delphi-Quelltext
1:
2:
uses
 ... JPEG,...

_________________
Delphi: XE - OS: Windows 7 Professional x64
Schakal Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Do 12.02.04 10:09 
ich will aber, das wenn ich wieder weg vom picture gehe, das bild wieder normal wird. wenn ich das jetzt so mache wie du beschrieben hast, dann bleibt es danach geändert.
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Do 12.02.04 17:52 
auch kein problem:
um das bild zurückzusetzen schreibst du im OnMouseMove Teil des Objekts das hinter der grafik liegt (aussenrum), z.B. das Formular, einen entsprechenden Gegenbefehl, d.h. dass die andere Grafik geladen werden soll.

_________________
Delphi: XE - OS: Windows 7 Professional x64
FatalError
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64

WIN ME
D6 Pers
BeitragVerfasst: Do 11.03.04 22:43 
Hi,

gibt es dazu
Zitat:
wenn ich wieder weg vom picture gehe, das bild wieder normal wird

noch eine andere Lösung als die mit dem Hintergrund?

Das Problem ist, wenn z.B. die gesamte Form aus einem image besteht, das etwa gleich groß ist wie die Form sebst. Dann kann es vorkommen, dass man mit der Maus die Form im Hintergrund einfach überspringt, d.h. dass dessen Mouseover -Befehl erst garnicht gesendet wird.


Grüße aus dem Ländle
Andy :D
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Do 11.03.04 23:08 
Hallo,

man kann auch eine neue Klasse von TImage ableiten und hierin die Messages CM_MOUSEENTER und CM_MOUSELEAVE abfangen.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TMyImg = class(TImage)
  private
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    MyImg: TMyImg;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}            

procedure TMyImg.CMMouseEnter(var Msg: TMessage);
begin
  inherited;
  Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'BMP1.bmp');
end;

procedure TMyImg.CMMouseLeave(var Msg: TMessage);
begin
  inherited;
  Picture.LoadFromFile( ExtractFilePath(ParamStr(0)) + 'BMP2.bmp');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyImg := TMyImg.Create(Self);
  MyImg.Parent := Self;
  MyImg.Left := 10;
  MyImg.Top := 10;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  MyImg.Free;
end;

end.


MFG

- Ernesto -


Zuletzt bearbeitet von ErnestoChe am Do 11.03.04 23:13, insgesamt 2-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 11.03.04 23:09 
Hallo!

Du kannst Dir eine eigene Komponente ableiten. Zum Beispiel so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
interface

type
  TmyImage = class(TImage)
  private
    FOnMouseLeave: TNotifyEvent;
    FOnMouseOver: TNotifyEvent;
    procedure CMMouseEnter (var Message : TMessage); message CM_MouseEnter;
    procedure CMMouseLeave (var Message : TMessage); message CM_MouseLeave;
  public
  published
    property OnMouseOver : TNotifyEvent read FOnMouseOver write FOnMouseOver;
    property OnMouseLeave : TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

implementation

procedure TmyImage.CMMouseEnter(var Message: TMessage);
begin
  inherited;
  if Assigned(FOnMouseOver) then FOnMouseOver(self);
end;

procedure TmyImage.CMMouseLeave(var Message: TMessage);
begin
  inherited;
  if Assigned(FOnMouseLeave) then FOnMouseLeave(self);
end;


Den Ereignissen OnMouseOver und OnMouseLeave kannst Du nun Ereignisbehandlungsroutinen zuweisen und in denen dann das Laden der Images erledigen.

Du hast die Wahl, wie Du die Komponente einsetzen möchtest:
(1) Zur Laufzeit erzeugen
(2) Noch ein bisschen Arbeit investieren und so machen, dass Du sie als "richtige" Komponente registrierst.

MfG
Peter

//edit: Mist, zu langsam ...

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
FatalError
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64

WIN ME
D6 Pers
BeitragVerfasst: Do 11.03.04 23:18 
Danke für die beiden schnellen und ausführichen Antworten! Muss ich direkt in mein Prog einbauen!

Grüße
Andy :lol: