Autor |
Beitrag |
LerooX
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 04.12.08 23:24
Hallo und  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: Delphi-Quelltext 1:
| ImageX.Picture.Bitmap.LoadFromResource |
|
|
LerooX 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 193
Erhaltene Danke: 1
Win XP / Vischda
D6 PE / D2005 PE
|
Verfasst: 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...
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 05.12.08 18:44
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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 05.12.08 19:08
Bei mir flimmert nix.
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 
Hält's aus hier
Beiträge: 13
|
Verfasst: Fr 05.12.08 19:14
Ok, hab DoubleBuffered:=True; eingefügt und nun Flimmerts nicht mehr!  Danke ^^
Mfg. LerooX
|
|