all you have to do is go on Serribi.net
On wild Pokemon and serval locations.
Heart scales are only in Pokemon emerald, ruby and sapphire but you can get one if you trade a heart scale from ruby or emerald or sapphire to leafgreen then take it but it will not do anything in the game.
You can find them underwater or held by some wild Luvdisc.
There's a man in Fallabur town who will re-teach a Pokemon a move for a heart scale. But you must find a heart scale, they are in several places on the map but are mostly in or near water.
You can find them underwater and if you catch a luvdisc they may be holding a heart scale.
You can get them if you find them somewhere. You can also get them if your Pokemon with pick up ability picked it up. If possible, you can fish in luvdiscs and use thief to steal heart scale that they usual hold.
you go to route 128 and surf and use super rod to fish. you will find a pokemon called luvdisc and catch it and they usually are holding heart scales.
Go up the waterfall in Ever Grande City and stay up there until you catch a Luvdisc and it holds a heart scale.(Then you can get as many as you want.)
you have to use hm rock smash on rocks to find them.
get an action replay and find a cheat for it (i forget what it is called) but there are 2 types, heart scale and master ball. i prefer the heart scale cheat.
When you have the HM dive then search the sea between Mossdeep city and Lilycove city for dark blue parts in the water and search under water for them
Go to Mossdeep City and surf out to the DARK NAVY BLUE patches of water.You must have a Pokemon the knows the move DIVE and dive down.You will find a HEART SCALE.THERE ARE OTHER HEART SCALES AROUND THE DARK PATCHES OF WATER AND THE ENTRANCE TO SOOTOPOLIS CITY.