Autor Beitrag
LerooX
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 04.12.08 23:04 
Hallo! :)

Kennt jemand ein gutes Beispiel um ein Image Hover (*wie in HTML/CSS*) mit TImage in Delphi zu erstellen?

Ich hab unter Google gesucht aber nichts richtiges gefunden.

Danke und Mfg. LerooX

Edit: Ich nutze Delphi 2009.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 04.12.08 23:24 
Hallo und :welcome: im Forum!

Es gibt beim TImage OnMouseEnter und OnMouseLeave, damit wirst du benachrichtigt, wenn die Maus in den Bereich kommt und wenn sie ihn wieder verlässt.

Du könntest die Bilder zum Beispiel als Ressource speichern und dann in diesen Ereignissen das entsprechende Bild laden. Dafür gibt es folgende Prozedur:
ausblenden Delphi-Quelltext
1:
ImageX.Picture.Bitmap.LoadFromResource					
LerooX Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 04.12.08 23:49 
Danke für deine Antwort!

Ich hab mal ohne Ressource versucht... hat super geklappt! *-> LoadFromFile*

Bei mir kommt leider paar mal ein Flimmern ..

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Image5MouseEnter(Sender: TObject);
begin
Image5.Picture.LoadFromFile('dark.png');
end;

procedure TForm1.Image5MouseLeave(Sender: TObject);
begin
Image5.Picture.LoadFromFile('null.png');
end;


Nun möchte ich mit Ressource machen, aber funktioniert es nur mit Bitmap? ... PNG irgendwie nicht... :(

Mfg. LerooX
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Fr 05.12.08 00:56 
Autsch, nichts für ungut aber das ist mit unter das schlechteste Codebeispiel.
Man läd die Dateien vor un nutzt sie dann. Bei dir werden sie immer geladen,
das nutzt nur den Fachhändlern die Fetplatten verkaufen.

Das flackern entsteht unter anderem durch den Ladevorgang.

Da du PNG's kanns ggf. diese Komponente verwenden:
Einloggen, um Attachments anzusehen!
_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 05.12.08 01:10 
Du musst du dafür einen TResourceStream benutzen um auf das Bild in der Ressource zuzugreifen und dann diesen Stream laden.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
uses
  PNGImage;

var
  Res: TResourceStream;
  Png: TPNGImage;
begin
  Res := TResourceStream.Create(HInstance, 'PngImageResName''PNG');
  Png := TPNGImage.Create;
  Png.LoadFromStream(Res);
  Image1.Picture.Graphic := Png;
  Res.Free;
Damit das beschleunigt ist, solltest du die Bilder in FormCreate in zwei TPNGImage-Variablen laden und dann nur noch das richtige zuweisen.
Warum hat user profile iconturboPASCAL ja gerade geschrieben.

user profile iconturboPASCAL hat folgendes geschrieben Zum zitierten Posting springen:
Da du PNG's kanns ggf. diese Komponente verwenden:
Er hat Delphi 2009, das unterstützt PNGs direkt ;-).
LerooX Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 05.12.08 08:19 
Danke für eure Antworten!

Ich werde mich mal bisschen mehr um Ressource beschäftigen. :)

Edit:
ausblenden Delphi-Quelltext
1:
2:
Damit das beschleunigt ist, solltest du die Bilder in FormCreate in zwei TPNGImage-Variablen laden und dann nur noch das richtige zuweisen.
Warum hat user profile iconturboPASCAL ja gerade geschrieben.


Das funktioniert leider bei mir immer noch nicht. :(
Resource laden hat bei mir geklappt. Aber wie soll ich diese Bilder in zwei Variablen laden?...


Mfg. LerooX
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 05.12.08 18:44 
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:
type
  TForm1 = class(TForm)
  ...
  public
    Png1, Png2: TPNGImage;
  end;

...

procedure TForm1.FormCreate(Sender: TObject);
var
  Res: TResourceStream;
begin
  Res := TResourceStream.Create(HInstance, 'PngImageResName1''PNG');
  Png1 := TPNGImage.Create;
  Png1.LoadFromStream(Res);
  Res.Free;

  Res := TResourceStream.Create(HInstance, 'PngImageResName2''PNG');
  Png2 := TPNGImage.Create;
  Png2.LoadFromStream(Res);
  Res.Free;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(Png1);
  FreeAndNil(Png2);
end;

procedure TForm1.ImageXMouseEnter(Sender: TObject);
begin
  ImageX.Picture.Graphic := Png1;
end;

procedure TForm1.ImageXMouseLeave(Sender: TObject);
begin
  ImageX.Picture.Graphic := Png2;
end;
Vielleicht sind Tippfehler drin, ich hab den Code nicht ausprobiert.
LerooX Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 05.12.08 18:58 
Danke für den Code! Klappt super!! :)

Hiermit sind meine Probleme gelöst. Vielen Dank!

PS: Ist es normal, das es so einbisschen Flimmert *Die Anwendung hab ich mal hochgeladen...* *Den Flimmer sieht man, wenn man mehrmals schnell auf dem Minimiere-Icon draufgeht...*
Ich habe viele Images verwendet... könnte dies der Grund sein? *Ich bastle eine GUI (Farbe: Blau)*



Mfg. LerooX
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 05.12.08 19:08 
Bei mir flimmert nix. :nixweiss:

Es gibt die Eigenschaft DoubleBuffered beim Formular z.B., vielleicht hilft das. Aber wie gesagt, egal was ich mache, das einzige was flimmernd aussieht ist der wechselnde Mauszeiger.
LerooX Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 05.12.08 19:14 
Ok, hab DoubleBuffered:=True; eingefügt und nun Flimmerts nicht mehr! :) Danke ^^

Mfg. LerooX