Avatar billede michdan Nybegynder
26. juni 2005 - 17:25 Der er 30 kommentarer og
2 løsninger

hotspot som i ad-aware fra lavasoft

Jeg kunne godt tænke mig at lave en form som den man ser i programmet 'ad-aware' fra lavasoft

Screenshot:
http://www.ethick.com/downloads/adaware.html

Det virker som om det er lavet som 'hotspot' hvor man kan vælge en menu ved at køre musen over de grafiske billeder.

Men hvordan laver man disse i delphi 7 ??

og kan man lave sådanne grafiske menu'er på andre måder ??
Avatar billede mtj111 Novice
27. juni 2005 - 08:04 #1
Laver man ikke bare nogle andre billeder med MouseOver.

Når musen bevæges (MouseOver) på image1, så skal billedet skiftes til det normale billede. Dette gøres med: image1.picture.loadfromfile('BilledeNR1.bmp')

Når musen bevæges (MouseOver) på form1, så skal billedet udskiftes med at andet, som er lysere (så det indikerer at det er "trykfølsomt"). Dette gøres med: image1.picture.loadfromfile('BilledeNR2.bmp')

Når der klikkes (MouseDown) på image1, så skal billedet udskiftes med at andet, som er mørkere (så det indikerer at knappen er nede. Lav evt lidt skygger). Dette gøres med: image1.picture.loadfromfile('BilledeNR3.bmp')

Det eneste problemt er at billedet kommer til at flimre når man bevæger musen.

Nogen der kan afhjælpe det??? evt med at loade billederne i hukommelsen, eller lave nogle "if-then"'er ;-)

Michael :-)
Avatar billede stone Forsker
27. juni 2005 - 08:19 #2
billederne kan loades fra imagelist, så flimre de ikke og en meget hurtigere respons
en loadfromfile..
/stone
Avatar billede mtj111 Novice
27. juni 2005 - 08:21 #3
OK... tak... det vil jeg også prøve!

Michael ;-D
Avatar billede mtj111 Novice
27. juni 2005 - 08:27 #4
Stone>> Helt nøjagtigt hvordan vil du få et billede [0] fra en imagelist ind i en image?

Image1.picture:= ???

Michael ;-)
Avatar billede michdan Nybegynder
27. juni 2005 - 09:25 #5
Nu er jeg ikke helt klar over hvordan det er lavet i 'ad-aware' programmet, som jeg bruger som forbilled, men hvordan laver man en mouse-over event i Image eller button componenten???

Jeg kan ikke se de har disse events som standard ...
Avatar billede mtj111 Novice
27. juni 2005 - 09:27 #6
Du markerer image1 på formen, og kigger derovre hvor du plejer at ændre på caption, name mv, men øverst i det område er der et faneblad, der hedder Events, som du skal klikke på... dér er MouseOver

Michael
Avatar billede michdan Nybegynder
27. juni 2005 - 13:58 #7
jeg var godt klar over at det skulle være under events i object inspectoren, men på min er der ingen event der hedder MouseOver....der er OnMouseDown, OnMouseMove, og OnMouseUp.

Hvilken version af delphi bruger du ?
Avatar billede mtj111 Novice
27. juni 2005 - 14:00 #8
oh... jeg erda dum... jeg fantaserer vist... ;-)

Den hedder selvfølgelig MouseMove... Sorry

Michael ;-)
Avatar billede mtj111 Novice
27. juni 2005 - 14:01 #9
Jeg har brugt både Delphi 6, Delphi 7. I øjeblikket bruger jeg Delphi 2005!

Forskellene er faktisk ikke så store i de forskellige versioner
Avatar billede stone Forsker
27. juni 2005 - 14:10 #10
her er et flimmerfri eksempel...

componenter:
toolbar
imagelist
xx antal button

i toolbar sætter du image til imagelist

click på button og gå til event OnMouseMove her skriver du:

toolbutton1.ImageIndex:= 1;

i din form event OnMouseMove skriver du:

toolbutton1.ImageIndex:= 0;

I imagelist har jeg 2 billeder som hedder bulboff(0) og bulbon(1)

så får du et flimmerfri mouseover effekt
Avatar billede michdan Nybegynder
27. juni 2005 - 18:31 #11
Jeg kan også få det til at virke med OnMouseMove eventen, hvor bitmap på et TImage skifter, men hvordan få jeg det til at skifte tilbage når musen forlader Timage området ??

Har prøvet som 'stone' beskrev at bruge OnMouseMove på selve formen, men så vil Bitmap ikke skifte når jeg kører over TImage billedet....??
Avatar billede mtj111 Novice
27. juni 2005 - 18:35 #12
ved at vælge MouseMove på form1...

Michael ;-)
Avatar billede michdan Nybegynder
27. juni 2005 - 18:47 #13
det var også det jeg gjorde men som sagt så vil TImage aldrig skifte, når jeg kører over den igen...den forbliver på det billede der er valgt ved form.
Avatar billede mtj111 Novice
27. juni 2005 - 18:50 #14
Læs i mit tidligere indlæg:

Når musen bevæges (MouseMove) på image1, så skal billedet skiftes til det normale billede. Dette gøres med: image1.picture.loadfromfile('BilledeNR1.bmp')

Når musen bevæges (MouseMove) på form1, så skal billedet udskiftes med at andet, som er lysere (så det indikerer at det er "trykfølsomt"). Dette gøres med: image1.picture.loadfromfile('BilledeNR2.bmp')

Når der klikkes (MouseDown) på image1, så skal billedet udskiftes med at andet, som er mørkere (så det indikerer at knappen er nede. Lav evt lidt skygger). Dette gøres med: image1.picture.loadfromfile('BilledeNR3.bmp')

Virker det så ikke???

Du kan prøve min flimrende måde først, så prøve den ikke flimrende ;-)

Michael :-)
Avatar billede stone Forsker
27. juni 2005 - 19:01 #15
så er der et eller andet du gør forkert det virker perfekt hos mig

hvis du har et panel eller andet som dækker for din form er det klar den ikke virker så skal du skrive det samme i den som i
eksemplet her.....
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
toolbutton1.ImageIndex:= 0;
end;

//stone
Avatar billede michdan Nybegynder
27. juni 2005 - 19:41 #16
engang mere...

Det virker fint med en toolbar, her skifter billederne fint, men hvis jeg placeres et image på en form kan jeg ikke få den til at skifte med en imagelist..

til mtj111:
ja det virker med image1.picture.loadfromfile, men som det flimmer meget, det ser meger bedre ud med imagelisten på toolbaren.
Avatar billede stone Forsker
27. juni 2005 - 19:44 #17
ok kigger lige senere på det i aften...
//stone
Avatar billede mtj111 Novice
27. juni 2005 - 19:47 #18
Michdan>> Det kan jeg heller ikke... Stone... Help us ;-)
Vi er enige om at det virker bedst i toolbaren, men så vidt jeg husker kan man ikke have billeder størere end 16x16 px!?! eller husker jeg forkert?

Jeg sidder nemlig ikke hjemme på min "Delphi-computer" :-)

Michael :-)
Avatar billede michdan Nybegynder
27. juni 2005 - 20:03 #19
jo størrelsen på bitmap height og width kan ændres i imagelisten's properties....jeg har brugt 64x64 px.
Avatar billede mtj111 Novice
27. juni 2005 - 20:06 #20
OK... ;-)

...Det er je ikke alle der husker som elefanter... ;-)
Avatar billede stone Forsker
27. juni 2005 - 20:21 #21
her er lidt ændringer i create som gør at det ikke flimre
selv om jeg ikke er meget for at loade extern men man kunne jo loade via en res fil
hmmm hmm


procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
image1.Picture.LoadFromFile('c:\temp\m0_0.bmp');
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
image1.Picture.LoadFromFile('c:\temp\m0.bmp');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.DoubleBuffered := true;

end;
Avatar billede mtj111 Novice
27. juni 2005 - 20:24 #22
Jeg plejer jo bare at ligge billederne i samme mappe som programmet og skrive: Image1.picture.loadformfile('Filnavn.bmp');

Stone>> Helt præcis, hvad gør DoubleBuffered?

Michael
Avatar billede michdan Nybegynder
27. juni 2005 - 20:33 #23
stone:
det virker bedre, men jeg ville også foretrække imagelisten....

lig et spm. mere vedrørende tollbaren....hvis man har flere buttons i toolbaren og bevæger musen henover dem, så skifter billederne ikke i toolbaren før jeg kørere musen væk fra toolbaren, men findes der en en metode der kan resette de øvrige buttons mens man kører henover toolbaren ?

ps. husk lige at smide et svar begge 2 så i kan få nogle points..
Avatar billede mtj111 Novice
27. juni 2005 - 20:39 #24
hmm... det ved jeg ikke... Stone er vist eksperten...

Men mange tak...
Avatar billede stone Forsker
27. juni 2005 - 20:41 #25
så skriver du det samme som i form1.onmousemove

procedure TForm1.ToolBar1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
toolbutton1.ImageIndex:= 0;
end;
Avatar billede stone Forsker
27. juni 2005 - 20:42 #26
og det skal du gøre for alle toolbutton

f.eks
toolbutton1.ImageIndex:= 0;
toolbutton2.ImageIndex:= 1;
toolbutton3.ImageIndex:= 2;
osv
Avatar billede mtj111 Novice
27. juni 2005 - 20:47 #27
Jeg takker!

Michael :-D
Avatar billede michdan Nybegynder
27. juni 2005 - 20:48 #28
håber point fordeling er ok....

til stone:
ja men hvis jeg f.eks. har 10 buttons virker det lidt 'upraktisk' at skulle nulstille alle buttons, hver gang jeg flytter musen til den ene side eller den anden side.
Hvis jeg hver gang flytter ned i formen først før jeg går til næste button vil det selvfølgelig virke med at nulstille alle buttons i form eventen, men hvis jeg bliver i toolbaren virker det ikke...
Avatar billede stone Forsker
27. juni 2005 - 20:56 #29
spørgsmål buffer...

mener at doublebuffer gør at du får mere hukommelse når image gentegnes på canvas
Avatar billede stone Forsker
27. juni 2005 - 21:11 #30
hmmm ja det er jo et problem når toolbutton ligger så tæt har du prøvet at lægge en seperator i mellem den vælges på samme måde som new button og så lægge koden fra form1.onmousemove

ved det er en hovsa løsning men så får din cursor fat i toolbaren før næste button
Avatar billede michdan Nybegynder
27. juni 2005 - 21:19 #31
nej men det virker også at resette efter sig, selvom det virker lidt tåbeligt.....men takker for svarene..
Avatar billede mtj111 Novice
27. juni 2005 - 22:01 #32
Pointfordelig er OK... det er jo trodsalt Stone der er Eksperten ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester