Entwickler-Ecke
Multimedia / Grafik - TImage - Image Hover
LerooX - Do 04.12.08 23:04
Titel: TImage - Image Hover
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 - 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 [
http://jansfreeware.com/articles/delphiresource.html] und dann in diesen Ereignissen das entsprechende Bild laden. Dafür gibt es folgende Prozedur:
Delphi-Quelltext
1:
| ImageX.Picture.Bitmap.LoadFromResource |
LerooX - 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 ..
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 - 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:
jaenicke - 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.
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
turboPASCAL ja gerade geschrieben.
turboPASCAL hat folgendes geschrieben : |
Da du PNG's kanns ggf. diese Komponente verwenden: |
Er hat Delphi 2009, das unterstützt PNGs direkt ;-).
LerooX - Fr 05.12.08 08:19
Danke für eure Antworten!
Ich werde mich mal bisschen mehr um Ressource beschäftigen. :)
Edit:
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 - Fr 05.12.08 18:44
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 - 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
jaenicke - 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 - Fr 05.12.08 19:14
Ok, hab DoubleBuffered:=True; eingefügt und nun Flimmerts nicht mehr! :) Danke ^^
Mfg. LerooX
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!