向阳 的个人资料乔木向阳?Where is my sunshin...照片日志列表更多 工具 帮助

乔木向阳?Where is my sunshine?

Suck everyday!
8月7日

重新开始写blog,回忆一些事情。

上周末整理了一下自己的物品、书籍和光盘,发现自己的一个特点就是懒惰,等事情到自己无法忍受的时候才想到改变。
用电脑也是一样,东西乱的不行时候才想到归类,重装系统。
这个习惯很不好,把简单的事情拖到复杂度极高而且不容易解决。
生活中很多事情不像电脑一样,快刀斩乱麻,重装或者恢复一下系统ok。
可惜人生没有备份还原点。
错过了或者做错了,都很难补救,让自己陷入深渊无法自拔,极其无奈~
为了解决这个问题给自己定一些规则:
1.三天整理房间一次。
2.一周整理一次电脑。
3.提前安排第二天需要做的事情。
 
希望可以有些帮助~
3月28日

『音乐天地』 [互助平台]Soulseek使用全攻略

『音乐天地』 [互助平台]Soulseek使用全攻略



笑言建议我单发帖说明,刚好西祠有好心人已经翻译了Q&A,一起贴过来罢!
   俺现在用soulseek,下了n张好碟,嘿嘿:)
    我现在主要在西祠混,那里专门又个版面叫"天罗地网",我们会在那里交流使用ssk的心得。我自己总结了一些,结合大家的。供对该软件感兴趣的朋友使用。
    BTW:这些天下歌都下疯了,全球那么多好音乐,发现自己太孤陋寡闻了呵呵。

  有问有答--Soulseek FAQ(用户指南)
  作者: 离散的时间 发表日期: 2003-05-12 16:33:15
  Q: What are all those numbers next to the users's names in the chatroom?
  A: The numbers next to the names in the chatroom user list provide
some useful information about each user; The 'files' column shows how
many files are shared by each user. This is sometimes inaccurate, as
it's only updated when the user joins the room, and the 'KBPS' column
shows the average upload speed of the user.
  问:在聊天室中用户名字旁边的数字是什么意思?
  答:聊天室中用户列表旁边的数字提供了一些关于每个用户的有用信息;"files"栏显示的是每个用户共享的文件数。这个数字某些时候是不准确的,因为这个数字只有当用户加入聊天室的时候才更新。"KBPS"栏给出了该用户平均的上传速度。

  Q: Can I download entire folders instead of just individual files?
  A: Yes! You can download whole folders with their contained files
and subfolders, and they will be placed in your save folder in a
folder structure identical to that at the uploader's. When browsing a
user's files, right-click a folder and select "Download Folder" to
queue all contained files for download.
  问:我可以下载整个文件夹以取代下载单个的文件吗?
  答:是的!你可以下载整个文件夹包括其中的文件和子文件夹,并且他们会在你的保存目录中按照和uploader的相同的目录结构进行放置。当浏览一个用户的文件时,对着一个文件夹点击鼠标右键并且选择"Download
Folder"使要下载的文件排队。

  Q: How can I change the maximum number of concurrent uploads and downloads?
  A: Both the upload and download panes have 'total max' settings to
their right. This defines the number of people you can simultaneously
download or upload from. You can never download more than one file at
a time from the same user, but this doesn't ultimately affect how
quickly you download from someone overall.
  问:我怎么改变当前的最大下载数和上载数?
  答:upload 和 download 面板都有 "total
max"设定在他们右边。这项决定了你可以同时下载或上传的人数。你每次从一个用户那儿只能当一个文件,但是这项不会影响你下载的速度。

  Q: How can I change the maximum speed of uploads and downloads?
  A: Through the Max U/L or D/L KBPS settings to the right of the
transfer panes. This setting applies to the total speed of all
transfers of that type. The default is 0 - unrestricted.
  问:我怎么才能改变上载与下载的最大速度?
  答:通过调整在传输面板右边的Max U/L 或 D/L
KBPS设定。这种设定应用于那种形式(download或upload)的全部传输的总速度。预设的0是不设限制的意思。

  Q: How is the wishlist used?
  A: Entries in your wishlist are search terms that are sent every
once in a while to poll for possible results. You can add new wishlist
entries directly from the search window by using the 'Add to wishlist'
button or manually at the wishlist window, which you can open from the
toolbar. You would typically use the wish list to find stuff you're
seriously interested in getting but can't otherwise find. Don't forget
to remove the search term from the wishlist after you've found what
you were looking for, or you'd keep getting results. You can only
remove wishlist entries at the wishlist window.
  问:wishlist怎么用?
  答:wishlist中的记载是每次都发送的用来统计可能结果的搜索条目。你可以用"Add to
wishlist"来增加新的wishlist条目。或者你可以点开工具条上的wishlist手工添加。你尤其可以用wishlist找到你非常想要而用其他方法找不到的东西。别忘了找到你想找的东西后把搜索条目从wishlist中删掉,要不然你就会持续不断的收到结果。你只能在wishlist窗口中移除条目。

  Q: Why are most of my downloads "remotely queued" and what can I do
to help that?
  A: Your downloads get remotely queued when you try to download from
someone who is already uploading to as many people as they can. The
best way to avoid getting queued in the first place is to pick users
who aren't busy. These will be marked in black in the search results
window (as opposed to gray).
  问:为什么我的下载绝大多数都是"remotely queued",并且我要怎样做呢?
  答:当你去下载那些已经到达最大上传人数的用户的文件的时候,你的下载就会是remotely
queue.避免排队最重要的就是选择不忙的用户。他们在搜索结果中用黑色标记(正相对于灰色)。

  Q: How can I change my username?
  A: From the 'Connection' menu, first make sure you're disconnected
using the 'Disconnect' button, then use 'Login as...' to input a new
user name and password.
  问:我怎样更改我的username?
  答:在"Connection" 菜单中,首先使用"Disconnect"按钮以确保你已经离线,接着用"Login as..."输入新的用户名和密码。

  Q: I can configure my router/firewall, any ports I should forward/open?
  A: You can forward/open ports 2234 and 5534 for better client performance.
  问:我可以设定我的路由器/防火墙,哪些端口应当打开?
  答:你可以打开端口 2234 和 5534 以获得更好的客户端表现。

  Q: I just installed Soulseek, but whenever I try to log on I get a
"wrong password" message, what's going on?
  A: Most likely you've picked a username already used by someone
else. Please use Connection->Login as to pick a different username
until you find one that's available.
  问:我刚安装了Soulseek,但是每当我登录的时候我都获得一条"wrong password"的信息,怎么回事?
  答:最有可能的就是你选择了一个别人已经在用的用户名。请用 Connection->Login as 选择一个不同的用户名直到可用。

  Q: Why do some of my transfers fail?
  A: This is the nature of peer-to-peer and networking in general.
File-sharing systems are extremely volatile in general and Soulseek is
no exception. You will definitely have a harder time behind a router
or a firewall.
  问:为什么我的有些传输会失败?
  答:总的来说这是点对点和网络的天性。文件共享系统总体来说是极不稳定的,Soulseek也不例外。当你在一个路由器或者防火墙之后你会很难受。

  Q: Why do all of my transfers fail?
  A: There are a few possible reasons for this. First, make sure you
have enough free space to download. Then, make sure that your assigned
save folder in the file sharing configuration exists. Even if it does
try selecting a new save folder. If all your transfers still keep
failing, this might be a networking issue. If you're on Windows 95 or
Windows 98, check the next question for tips on that.
  问:为什么我所有的传输都失败?
  答:有几个可能的原因。第一,确认你有足够的空间下载。第二,确认你在file sharing
configuration中指定的存放目录存在。或者你试试选择一个新的存放目录。如果你的所有传输仍然失败,这也许就是个网络问题了。如果你的系统是Window
95 或 Windows 98,看下一个问题。

  Q: After using Soulseek for a while, I can't seem to do anything
else with my Internet connection. Websites won't load, ftp clients
won't connect, etc
  A: This seems to happen a lot on older versions of Windows. Win2k
and WinXP don't exhibit that problem. If you're using Windows 95 or
Windows 98, you can improve your situation by editing the appropriate
registry key. Here are more detailed instructions courtesy of user
111110101011:
  first, launch regedit: Start > Run > regedit Navigate with the left
window in order to find this : HKEY_LOCAL_MACHINE \System
\CurrentControlSet \Services \VxD \MSTCP\ At this point, you have to
create a new string value (not a key), with the right window of
regedit, right click with the mouse then name it : MaxConnections
assign its value double clicking on it, enter this: 1024 Close
regedit, and restart your computer.
  问:我用了一会儿Soulseek后,我好像不能用internet做其他事了。网站上不去,ftp连不上,等等。
  答:这种问题多发生于一些用老版本Windows的系统。Win2k和WinXP没有出现过这样的问题。。如果你用的是windows95 或
windows 98,你可以通过改注册表来改善处境。下面是用户 111110101011的介绍:
  首先,弹出注册表编辑器:Start > Run > regedit Navigate
在左边窗口以找到这个:HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services
\VxD \MSTCP\ 在这一点,你必须建立一个新的弦值(不是键值),用右边串口的regedit,右击鼠标并命名:MaxConnections
双击鼠标分配它的值,输入:1024
  关闭注册表编辑器,重启电脑。

  Q: Why do I keep getting disconnected?
  A: The server is probably overloaded (at the time of writing it is
over 300% over capacity).
  问:为什么我一直都是disconnected?
  答:服务器可能过载了(写这个东西的时候300%超出容量)。

  Q: I forgot my password, how can I get it back?
  A: There is no way to retrieve lost passwords since Soulseek doesn't
associate usernames with email addresses. Please switch to a different
login to keep using Soulseek.
  问:我忘了我的密码,怎么找回它?
  答:因为Soulseek没有把用户名和电子邮件地址联系起来,所以找不回密码。请用别的名称登录以继续使用Soulseek。

  Q: I can't log on at all! When I try it says the server may be down.
  A: In all probability the server is down. We often experience bursts
of growth in usership that create new problems and difficulties that
force us to shut the server down. Check out the messageboard for
possible updates or just try logging in later.
  问:我根本无法登录!当我尝试的时候它就说服务器可能当机了。
  答:可能服务器就是当机了。我们经常经历用户的爆炸,由此造成的问题和难题迫使我们当机。看一看messageboard有没有新的版本或者过会儿再登录。

  Q: I can't log on at all! When I try it says it can't retrieve
server information/the server list is empty.
  A: The server list is retrieved from www.soulseek.org using Internet
Explorer's backend. If you can browse www.soulseek.org then in all
probability you should not be getting this message. If you can't,
resolve the browsing problem to be able to log in.
  问:我根本无法登录!当我尝试的时候他说it can't retrieve server information/the server
list is empty.
  答:服务器列表是从www.soulseek.org用Internet
Explorer的后台程序取回的。如果你能浏览www.soulseek.org可能就不会得到这条信息。如果你不能,回到浏览问题或许就能够登录了。

  Q: My downloads are going way too slow! why?
  A: The person you're downloading from may be uploading to a number
of other users in parallel, they may have set a rather low upload
speed limit or may just have not had a lot of bandwidth to begin with.
Use the upload speed column in chatrooms and search results for a
half-assed estimate of users' upload speeds.
  问:我的下载太慢了!为什么?
  答:你正在下载的那个人可能正在平行的上传给许多其他的用户,他们可能设定了一个相当低的上传速度或者可能就是没有足够的带宽。用聊天室中和搜索结果中的速度估算用户的上传速度。

  Q: Why can't I browse some people's file list?
  A: Again, the nature of peer-to-peer. Not every person can browse
every other person. Everything from routing problems to firewalls
(usually firewalls) can stop two users from creating a connection over
which to transfer data. Not being able to browse other users is
extremely common (and unavoidable). This is much more true if you are
yourself firewalled or behind a router.
  问:为什么我不能浏览某些用户的文件目录?
  答:再说一次,这是点对点的固有属性。不是每个人都能浏览其他所有人的文件的。从路由到防火墙都可以阻止两个人建立传输数据的连接。不能浏览其他用户是极为正常的(并且是不可避免的)。这点会更加明显当你处于路由器和防火墙之后时。

  Q: Why can't I browse my own files?
  A: This is normal if you're behind a firewall or a router.
  问:为什么我自己不能浏览自己的文件?
  答:当你处于防火墙和路由器之后时这很正常。

  Q: I use a proxy to connect to the Internet, does Soulseek support that?
  A: Not currently. Proxy support is planned, but not in the near future, sorry.
  问:我用代理服务器连接internet,Soulseek支持它吗?
  答:目前还不行。代理服务器支持正在筹划,但不会是不远的将来,对不起。

  Q: I started Soulseek and my user list/download queue were gone. Why?
  A: Sometimes, when Soulseek is forcibly shut down (often as part of
a reboot), its configuration files get corrupted. This may result in
the loss of your user list, your download queue or other bits of
information. Unless you've backed up all the *.cfg files in the
soulseek installation folder, there is no way to restore this
information.
  问:我启动Soulseek但是我的user list/download queue 不见了。为什么?
  答:有时,当Soulseek被强制性的关停后(经常是重启的一部分),它的设置文件变得不可靠。这样可能造成你的user
list,你的下载队列和别的信息的丢失。除非你back up了 soulseek安装目录中的所有的.cfg文件,否则没有办法保存这样的信息。

  Q: Why does my Soulseek client keep having short, frequent freezes?
  A: This is fairly common when sharing large numbers of files. Try
sharing less if you're having this problem.
  问:为什么我的soulseek客户端总是短暂而频繁的没有动静?
  答:当你共享了大量的文件的时候这就很平常了。当你有这样问题的时候试着少共享些。

  Q: Why does Soulseek take so much memory? Anything I can do to help it?
  A: Soulseek is admittedly quite a resource hog. If this is a serious
problem for you, you can help clear some of the memory used by
restarting the client every once in a while.
  问:为什么Soulseek占用那么大内存?我能为此做什么吗?
  答:Soulseek确实是一个资源黑洞。如果这对你是一个严重的问题,你可以隔一会儿重启客户端以清理内存。

  Q: Can I run my own soulseek server?
  A: For a very long time, we gave people the freedom of starting
their own servers. It was never seriously taken advantage of. The only
people interested in using Soulseek wanted to use it for electronic
music, and for that purpose it was better for everyone to stay on the
same server. The reason we've decided not to let users do that for now
is the new download privileges system, which is what we depend on to
encourage people to donate. This would be very hard to manage across
multiple servers. Also, now that we have chatrooms and a decentralized
network, it becomes much more feasible to support greater numbers of
users on one server. We may very well start allowing people to run
their own servers again in the future. This is just not the right
time.
  问:我能运行我自己的soulseek服务器吗?
  答:在相当长的时间里,我们给人们创建他们自己服务器的自由。没有好处。人们用soulseek的目的是为了音乐,而为了这个目的最好大家都呆在同一个服务器上。我们决定不允许用户这样做的原因是新的下载特权系统,这是依靠于鼓励人们去捐赠。这会使管理多个服务器很困难。而且,我们现在有聊天室和分散化的网络,它使支持更多的用户在一个服务器上更可能。我们会再次允许人们运行自己的服务器在将来。现在不是时候。

  Q: Is there a way to donate other than paypal?
  A: Not right now, but we're looking into it.
  问:除了付款有别的办法捐赠吗?
  答:现在不行,但我们正在研究它。

  Q: I sent you an email and you didn't reply. Why?
  A: It's a time issue. I get a lot of email, so I try to focus on the
more critical ones. You'd have a much better chance of getting a reply
by messaging me when I'm logged on to Soulseek. (my username is 'nir')
  问:我发了封e-mail而你没有回复。为什么?
  答:是个时间问题。我又许多邮件,所以我试着集中在更具批评性的邮件。当我登录soulseek的时候你发信息给我你会有更多的机会得到我的答复(我的用户名是nir)

  Q: Is there a Linux version of the Soulseek client?
  A: Alex Kanavin is maintaining an open source python port of the
Soulseek client that's available at http://www.sensi.org/~ak/pyslsk/
  问:有没有Linux版本的Soulseek客户端?
  答:Alex Kanavin有公开源程序的Soulseek客户端,在http://www.sensi.org/~ak/pyslsk/

  Q: Is there a Mac version of the Soulseek client?
  A: I heard tell that the Linux client mentioned above could be made
to run on a Mac, provided that you can get python running on it. Any
solid info on that would be much appreciated.
  问:有没有Mac版本的Soulseek客户端?
  答:我上面提到的Linux版本客户端可以被改造用来运行在Mac上,尽管你可以用python 运行它。任何关于它的有建设性的信息都是欢迎的。

  Q: What are download privileges?
  A: A user that is download privileged will usually have their files
queued before the those of users who are not download privileged. That
means that more often than not, your downloads will be pushed straight
to the top of the upload queue.
  问:什么是下载特权?
  答:拥有下载特权的人的文件会比没有的人排队更靠前。这意味着,更多时候你的下载请求会排在上传的顶端。

  Q: What if a user is already uploading to a user with download privileges?
  A: Your downloads will be queued right after all other downloads to
download privileged users. Although that doesn't happen very often
(hasn't happened to me yet), since there are relatively very few
download privileged users.
  问:当一个用户上传文件给一个有下载特权的用户会怎样?
  答:你的下载会排在所有拥有下载特权的用户之后。但是这不经常发生(在我这儿没发生过),因为没有多少人有下载特权。

  Q: How do I acquire download privileges?
  A: Download privileges are given in return for donations, as a way
to reward users who finanically support for work. 30 days of download
privileges are given to the user for every 5$ donated.
  问:我怎么获得下载特权?
  答:下载特权作为捐赠的回馈,是一个奖励对我们经济资助的荣誉。每5美元的捐赠可获得30天的下载特权。

  Q: I donated, when are my download privileges going to be activated?
  A: Please allow us up to 48 hours to activate your privileges. We
have to activate them all manually. If 48 hours have passed from the
time you made your donation and you still haven't received a private
message announcing your privileges, please mail us at nir@slsk.org
with the subject line: LATE PRIVILEGES and we'll tend to it as soon as
we can.
  问:我捐赠了,什么时候我的下载特权能被激活呢?
  答:请给我们48小时激活你的下载特权。我们必须收购激活他们。如果自你捐赠之时48小时已过你仍然没有收到你条私人消息通知你的特权,请给我们发邮件:nir@slsk.org
并注明:LATE PRIVILEGES 。我们将会尽快处理。

  Q: My download privileges were just activated! Can I start enjoying
them right away? Would downloads I queued before the activation be
automatically moved ahead?
  A: Since the server gives users the list of download privileged
users when they log on, users that logged on before your privileges
were activated would not queue your files in the described fashion.
Because of that, it usually takes a few hours until everyone
recognizes you as download privileged. Also, files that were queued
before the activation would not be moved ahead unless the uploader
closes the client and restarts it later on. What all this means is the
first day of having download privileges is somewhat of an uneven
experience.
  问:我的下载特权已经被激活!我能马上就开始享受吗?我的在激活前的下载队列能自动的移动到前方吗?
  答:因为服务器实在用户登录时发给用户一份下载特权用户的名单目录,所以在你的下载特权被激活之前登录的用户不会把你的请求排在前方。因此,常常需要数小时才能让大家都认证你的下载特权。同时,在特权被激活之前排队的文件不会被放置在前方直到上传者关闭客户端并重新启动它。总的意思就是拥有下载特权的第一天不会是很平顺的体验。

  Q: I've had my download privileges for a while now, but there is
still the occasional user that queues my downloads at the end of the
their upload queue.
  A: Only clients of version 126 and later support preferential
queuing to download privileged users. That does mean well over 95% of
everyone using Soulseek right now, and that percentage will just
increase. Still, there always seem to be a few users that never
upgrade unless they have to, but those are pretty rare.
  问:我已经拥有下载特权好一会儿了,但是仍然偶有用户把我的下载排在上传队列的底端
  答:只有版本号 126 或是其后底客户端支持优先排列下载特权用户。这意味着超过95%用的是新版的,并且这个比例不断升高。但是永远有一小撮用户从来不升级直到他们不得不这么做,幸好这样的人不多。

  Q: Is there any way to know what the status of my download privileges are?
  A: If you're using at minimum version 136 of the client, you can
always use Options->Check Privileges Status to see how much privileges
time you have left, or if you have them at all.
  问:有没有方法知道我的下载特权的状态?
  答:如果你正在使用的是最小版本136的客户端,你可以使用Options->Check Privileges
Status来查看你的特权还剩多少时间,或者你根本不拥有。

  Q: What if almost everyone made donations and they all had download
privileges? Wouldn't that make the system useless?
  A: If that ever had a chance of happening, yes. Less than 0.5% of
all Soulseek users have made a donation so far. At worst (at best), I
don't see more than 2% of all users donating on a regular basis
considering our track record.
  问:如果几乎所有用户都捐赠并且他们都获得了下载特权了呢?这不就使系统无用了吗?
  答:如果上面所说的有机会发生的话就太好了。到目前为止,少于0.5%的用户曾经捐赠过。考虑到我们的纪录,最坏(最好),我不指望有超过2%的人。

  Q: Is that fair? What if I can't make a donation because I'm
poor/young/don't have paypal/living in a geographically remote
location?
  A: The actual effect on non-privileged users in the system is
negligible simply because only a microscopic fraction of all users
have download privileges. But even if that wasn't the case, we needed
to find a way to get financial support so that we could keep
developing and operating Soulseek. Turning Soulseek into a
subscription service would have killed it. Using advertising,
especially the more profitable type that relies on installed spyware
would have made Soulseek a lot less pleasant to use. We have been
asking for donations for a very long time, but the response was
laughable. By offering download privileges we not only motivate a lot
more people to make donations, as is evident by the dramatic increase
in donations since we started offering them, but we also provide fair
recompense to people who genuinely want to help out. All at virtually
no hassle to the average Soulseek user.
  问:这公平吗?如果我没有捐赠仅仅因为我穷/年轻/没有支付能力/居住于地理距离遥远的地方怎么办呢?
  答:目前对于系统中的无特权用户影响是可以忽略不计的,因为在众多用户中只有微不足道的一部分有下载特权。但是虽然微不足道,我们需要寻找一种途径来获得经济资助以用来持续的开发和运行Soulseek。把Soulseek变成一个捐助署名的服务器将会毁了它。用广告,特别是那种倚靠于安装间谍软件以获取更大利润的类型将会使Soulseek丧失很多使用的乐趣。我们已经为呼吁捐赠耗费了很长时间,但是回应相当可笑。用给予下载特权的方法我们不仅动员了更多的人参与捐款--并且这点被自从我们开始给予特权捐款数的梦幻般的增长所佐证,并且我们为那些真正希望我们克服困难的人们以相当的回报。这些实际上都为给大多数的Soulseek用户带来麻烦。



    soulseek使用初学者速成说明:

    1.下载soulseek:
    地址连接:
    http://www.slsk.org/slsk148.exe
    文件大小:738k
    注:这个连接来自soulseek的官方站点,但我下载一直失败,不知道为什么,可能是下载人太多,所以你需要耐心等待。

    2.安装后,开始使用
    首先,它会提醒你输入自己的ID,这个ID必须是英文的,你可以根据喜好设定,不用担心重名,比如你的ID是newbees,如果有重名的,它会自动随机生成一个数字,比如newbees927。之后设一个密码、确认密码,即可开始使用。

    3.设定你的共享夹:
    点击"file sharing"选择你想和大家共享的文件夹,打勾复选。

    4.在你不知道添加哪些用户之前,你可以直接使用它的搜索功能。
    点击"searching files"输入你要查询的歌手、歌名或专辑名称,即可进行搜索。
    黑色表示对方在线,当时即可下载;灰色表示对方不在线。选中你要下载的歌曲,右键download即可。

    5.如何添加用户?
    点击"user list",你会在右边看到有一个对话框,单击空白处,点右键,输入你么添加的用户名即可。添加后,再点右键会有一系列功能,最常用的"send
message"你可以直接和用户对话,和聊天室一样;"Browse files"查看它的共享夹。

    其他:
    1.有哪些文件是不能下载的
    在soulseek里,如果你搜到的文件含有INCOMPLETE~前缀,说明该文件对方并没有下载完毕;
    在WinMX里如果你搜到的文件含有__INCOMPLETE___前缀,也说明该文件对方并没有下载完毕
    不要下载这两类文件,徒劳

    2.小鸟的状态:
    爱情与火箭 发表日期: 2003-05-09 08:04:25
    那个小鸟如果是红色,说明用户不在线;如果是张开翅膀呈现蓝色,表示用户在线;如果合上翅膀呈蓝色说明用户处于stand
by状态,也就是他可能已经让该软件最小化,并且长时间没有检查。

    3.常去聊天室设定:
    影虫:
    如果你进到newbees的时候点右键有一个toggle room autojoin
    点了以后每次启动slsk就自动进入这个房间了很方便

    4.有的朋友说为什么共享了目录可对方还是看不到?
    也许是option->file sharing configuration ->里面的My shared files should be
    选成了People in my user's,当然对方已经add list就不会出现这种情况了
    一般设为Everyone就可以了

    5.设置上下传速率
    Max D/L 和Max U/L KBPS 这个选项里越大越好
    其实填写为0就是无限制了可以系统自由分配了


    6.聊天室的使用方法:
    右下角的rooms我感觉挺有用,爱好相同的人可以在不同的聊天室里交流看法,也方便添加好友和交换文件。ROOMS区的左边显示的是聊天室的名称,右边显示的是当前屋内人数。在ROOMS区点击右键,再点refresh会重新刷新列表。这时候的列表可能很乱,不要紧,在rooms键上点一下,聊天室就会
按字母顺序排列了。但这时候的聊天室仍然浩如烟海,怎么进入我们的目的聊天室呢?其实只要你
把鼠标放在ROOMS区,然后在键盘上点你想进入的聊天室的首字母,那么首字母相同的聊天室的名字就会高亮。比如,爱火创建的聊天室名字是newbees,只要你在点n,n打头的聊天室就会跳出来了,这样你选择起来就容易的多了。但值得一提的是,可能由于rooms太多,所以refresh相当耗费资源。我的机器只要refresh就死机,这也是我一直到现在都没有进入newbees的原因。

    7.搜索文件技巧
    搜索文件的时候,可以看见在搜索框的上方有一行字,上边说得是搜索时候的几种语法规则,如果你只用初级搜索,那直接键入名称就行了;如果你就进行高级搜索,那么上边的提示可能很有帮助。

    8.下载实用技巧
    在soulseek上进行下载的时候有一项非常实用的功能,就是 Download
Folder,这让我们可以很方便的整个目录,整盘专辑的下载。但如果你的机器配置不好的话,在download
folder的时候一定要先看清楚此目录的大小,因为目录太大的话一样可以让你资源耗尽而死机。如果你不幸中招,删除下载文件的时候也要小心,要一点一点的删,要有耐心。假如你全部选定,一次删除的话,十有八九还是会死机。
    点着正从你机器上下载或者在你的User区的用户名,点击右键,会出现 BAN User 或BAN from
Downlading,意思是禁止此用户下载。所以,我们在下载别人硬盘里的好东西的时候,一次不要下太多,要不很容易被别人ban.

    9.当 USE LIST 里的朋友变成兰色,甭管张没张翅膀。你用右键点他选BROWSE FILES,可以BROWSE他的HARD DISK。

    10.在SEARCH FILES的时候,列表中呈黑色的文件说明该用户在线(废话)。这时可以看他的网络状态(在每首歌的后面),数值高的说明可以从他那里得到高速下在。

    11.如果他明明在线,而你下他的MP3却显示黑色,表示他选了ONLY THE USERS IN
LIST(只允许自己列表中的人下在自己的MP3)。希望大家不要选这个。把自己的好东西与大家共享。

   12.怎样才知道下载对方的文件快?
  在右边一栏的user栏里,有user的列表以及他文件的数量,还有就是电脑测算出来的文件传输速度,这一排数字的大小决定了你下载的快慢,但并不是绝对的。这个数字是根据网上传输的人数以及平时上网人的数量决定的。另外,你可以试着先下载对方一首歌,看看传输速度如何,如果慢,就不下载,尽量找相对快一些的用户下载。

   13.什么时候下载的速度最快?
  肯定是晚上,我这几天的经验告诉我,一般在晚上11点至次日凌晨3点钟这段时间最快。

   14.如何下载一张专辑?
  当你浏览对方的文件夹时,有鼠标右键点击他的文件夹,会出现一个菜单,选择"download
folder",这样做的好处是,你可以把整张专辑下载下来,在你的硬盘里会有一个目录,便于文件管理。同时,在下载的列队里面,在folder一栏能随时看到是什么文件夹。如果你单独下载的一首歌,folder一栏便是空白。

   15.关于下载列表
  你在下载的列表里面的status一栏,会经常看到这样的词:
  Remotely Queued:这个意思就是排队等待,有点慢慢长夜何时天亮、漫漫长路何时是尽头的意思,
  Awaiting User:对方关机睡觉觉了,所以你不能下载,等他再次上线,你就可以了。
  Initializing:就是正在初始化,它的意思是在试图下载文件,但是中间要有一些传输上的协议什么的,所以需要几秒钟的等待时间。
  Failed:就是下载失败,具体原因不好说
  还有一个叫什么baned,目前我的列表里没有,就是对方禁止你下载他的文件的意思,一般这种情况,你就把列表里的文件删除吧。
  另外还有一个file not
found,大概就是你选取了要下载的文件,但这期间对方移动了文件,如果你想下载的话,就再重新搜索一下他的硬盘,看看能不能重新确定下载的路径。

   16.如何搜索文件?
  建议大家搜索乐队、歌手的名字,前面有"the"的尽量去掉,以便能搜索出更多结果。搜索结果可以按不同方式排序,如果你想要整张专辑,可以在结果中有鼠标右键点击该文件,然后选择"browse
user's files",但是前提必须是这个文件在列表中处于黑色状态,灰色的表示该用户目前处于离显或隐身状态。
3月16日

晚上看了会《七剑下天山》,

一天又过去了,晚上看了会《七剑下天山》,额滴神呀!有的地方配乐太不靠谱了吧,赵文卓到一个表演歌舞的屋子后,放的背景音乐和现代酒吧里的差不多,潘哥刚好从房间出来,就问我是什么电视剧,我说《七剑》,他诧异的说:"不像古装剧呀",nnd!
画面也看着很怪异,很"电影"的样子,据说是国内耗资最大的电视剧,可能胶片质量好(像电影一样的效果),内容好坏还是接着看吧。。。

dll使用介绍

话题2518826的标题是: 怎样调用DLL中的函数 (100分)
分类:系统相关 dingzz (2004-03-24 10:33:00)
怎样知道dll文件中有些什么样的函数,怎样调用它。

app2001 (2004-03-24 10:37:23)
Delphi环境中编写调用DLL的方法和技巧

第一章 为什么要使用动态链接库(DLL) top

提起DLL您一定不会陌生,在Windows中有着大量的以DLL为后缀的文件,它们是保证Windows正常运行和维护升级的重要保证。(举个例子,笔者的Win95
System目录下尽有500多个DLL文件。)其实,DLL是一种特殊的可执行文件。说它特殊主要是因为一般它都不能直接运行,需要宿主程序比如*.EXE程序或其他DLL的动态调用才能够使用。简单的说,在通常情况下DLL是经过编译的函数和过程的集合。

使用DLL技术主要有以下几个原因:



一、减小可执行文件大小。

DLL技术的产生有很大一部分原因是为了减小可执行文件的大小。当操作系统进入Windows时代后,其大小已经达到几十兆乃至几百兆。试想如果还是使用DOS时代的单执行文件体系的话一个可执行文件的大小可能将达到数十兆,这是大家都不能接受的。解决的方法就是采用动态链接技术将一个大的可执行文件分割成许多小的可执行程序。



二、实现资源共享。

这里指的资源共享包括很多方面,最多的是内存共享、代码共享等等。早期的程序员经常碰到这样的事情,在不同的编程任务中编写同样的代码。这种方法显然浪费了很多时间,为了解决这个问题人们编写了各种各样的库。但由于编程语言和环境的不同这些库一般都不能通用,而且用户在运行程序时还需要这些库才行,极不方便。DLL的出现就像制定了一个标准一样,使这些库有了统一的规范。这样一来,用不同编程语言的程序员可以方便的使用用别的编程语言编写的DLL。另外,DLL还有一个突出的特点就是在内存中只装载一次,这一点可以节省有限的内存,而且可以同时为多个进程服务。



三、便于维护和升级。

细心的朋友可能发现有一些DLL文件是有版本说明的。(查看DLL文件的属性可以看到,但不是每一个DLL文件都有)这是为了便于维护和升级。举个例子吧,早期的Win95中有一个BUG那就是在闰年不能正确显示2月29日这一天。后来,Microsoft发布了一个补丁程序纠正了这个BUG。值得一提的是,我们并没有重装Win95,而是用新版本的DLL代替了旧版本的DLL。(具体是哪一个DLL文件笔者一时想不起来了。)另一个常见的例子是驱动程序的升级。例如,著名的DirectX就多次升级,现在已经发展到了6.0版了。更妙的是,当我们试图安装较低版本的DLL时,系统会给我们提示,避免人为的操作错误。例如我们升级某硬件的驱动程序时,经常碰到Windows提示我们当前安装的驱动程序比原来的驱动程序旧。



四、比较安全。

这里说的安全也包括很多方面。比如,DLL文件遭受病毒的侵害机率要比普通的EXE文件低很多。另外,由于是动态链接的,这给一些从事破坏工作的"高手"们多少带来了一些反汇编的困难。



第二章 在Delphi中编写DLL top



注意:在这里笔者假定读者使用的是Delphi 3或Delphi
4开场白说了那么多,总该言归正传了。编写DLL其实也不是一件十分困难的事,只是要注意一些事项就够了。为便于说明,我们先举一个例子。



library Delphi;



uses

SysUtils,

Classes;



function TestDll(i:integer):integer;stdcall;

begin

Result:=i;

end;



exports

TestDll;



begin

end.



上面的例子是不是很简单?熟悉Delphi的朋友可以看出以上代码和一般的Delphi程序的编写基本是相同的,只是在TestDll函数后多了一个stdcall参数并且用exports语句声明了TestDll函数。只要编译上面的代码,就可以得到一个名为Delphi.dll的动态链接库。现在,让我们来看看有哪些需要注意的地方。一、在DLL中编写的函数或过程都必须加上stdcall调用参数。在Delphi
1或Delphi 2环境下该调用参数是far。从Delphi
3以后将这个参数变为了stdcall,目的是为了使用标准的Win32参数传递技术来代替优化的register参数。忘记使用stdcall参数是常见的错误,这个错误不会影响DLL的编译和生成,但当调用这个DLL时会发生很严重的错误,导致操作系统的死锁。原因是register参数是Delphi的默认参数。



二、所写的函数和过程应该用exports语句声明为外部函数。

正如大家看到的,TestDll函数被声明为一个外部函数。这样做可以使该函数在外部就能看到,具体方法是单激鼠标右键用"快速查看(Quick
View)"功能查看该DLL文件。(如果没有"快速查看"选项可以从Windows CD上安装。)TestDll函数会出现在Export
Table栏中。另一个很充分的理由是,如果不这样声明,我们编写的函数将不能被调用,这是大家都不愿看到的。



三、当使用了长字符串类型的参数、变量时要引用ShareMem。

Delphi中的string类型很强大,我们知道普通的字符串长度最大为256个字符,但Delphi中string类型在默认情况下长度可以达到2G。(对,您没有看错,确实是两兆。)这时,如果您坚持要使用string类型的参数、变量甚至是记录信息时,就要引用ShareMem单元,而且必须是第一个引用的。既在uses语句后是第一个引用的单元。如下例:

uses

ShareMem,

SysUtils,

Classes;

还有一点,在您的工程文件(*.dpr)中而不是单元文件(*.pas)中也要做同样的工作,这一点Delphi自带的帮助文件没有说清楚,造成了很多误会。不这样做的话,您很有可能付出死机的代价。避免使用string类型的方法是将string类型的参数、变量等声明为Pchar或ShortString(如:s:string[10])类型。同样的问题会出现在当您使用了动态数组时,解决的方法同上所述。



第三章 在Delphi中静态调用DLL top



调用一个DLL比写一个DLL要容易一些。首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较。同样的,我们先举一个静态调用的例子。



unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;



type

TForm1 = class(TForm)

Edit1: TEdit;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}



//本行以下代码为我们真正动手写的代码



function TestDll(i:integer):integer;stdcall;

external 'Delphi.dll';



procedure TForm1.Button1Click(Sender: TObject);

begin

Edit1.Text:=IntToStr(TestDll(1));

end;



end.



上面的例子中我们在窗体上放置了一个编辑框(Edit)和一个按钮(Button),并且书写了很少的代码来测试我们刚刚编写的Delphi.dll。大家可以看到我们唯一做的工作是将TestDll函数的说明部分放在了implementation中,并且用external语句指定了Delphi.dll的位置。(本例中调用程序和Delphi.dll在同一个目录中。)让人兴奋的是,我们自己编写的TestDll函数很快被Delphi认出来了。您可做这样一个实验:输入"TestDll(",很快Delphi就会用fly-by提示条提示您应该输入的参数是什么,就像我们使用Delphi中定义的其他函数一样简单。注意事项有以

下一些:



一、调用参数用stdcall。

和前面提到的一样,当引用DLL中的函数和过程时也要使用stdcall参数,原因和前面提到的一样。



二、用external语句指定被调用的DLL文件的路径和名称。

正如大家看到的,我们在external语句中指定了所要调用的DLL文件的名称。没有写路径是因为该DLL文件和调用它的主程序在同一目录下。如果该DLL文件在C:\,则我们可将上面的引用语句写为external
'C:\Delphi.dll'。注意文件的后缀.dll必须写上。



三、不能从DLL中调用全局变量。

如果我们在DLL中声明了某种全局变量,如:var s:byte
。这样在DLL中s这个全局变量是可以正常使用的,但s不能被调用程序使用,既s不能作为全局变量传递给调用程序。不过在调用程序中声明的变量可以作为参数传递给DLL。



四、被调用的DLL必须存在。

这一点很重要,使用静态调用方法时要求所调用的DLL文件以及要调用的函数或过程等等必须存在。如果不存在或指定的路径和文件名不正确的话,运行主程序时系统会提示"启动程序时出错"或"找不到*.dll文件"等运行错误。



第四章 在Delphi中动态调用DLL top



动态调用DLL相对复杂很多,但非常灵活。为了全面的说明该问题,这次我们举一个调用由C++编写的DLL的例子。首先在C++中编译下面的DLL源程序。



#include



extern "C" _declspec(dllexport)

int WINAPI TestC(int i)

{

return i;

}



编译后生成一个DLL文件,在这里我们称该文件为Cpp.dll,该DLL中只有一个返回整数类型的函数TestC。为了方便说明,我们仍然引用上面的调用程序,只是将原来的Button1Click过程中的语句用下面的代码替换掉了。



procedure TForm1.Button1Click(Sender: TObject);

type

TIntFunc=function(i:integer):integer;stdcall;

var

Th:Thandle;

Tf:TIntFunc;

Tp:TFarProc;

begin

Th:=LoadLibrary('Cpp.dll'); {装载DLL}

if Th>0 then

try

Tp:=GetProcAddress(Th,PChar('TestC'));

if Tp<>nil

then begin

Tf:=TIntFunc(Tp);

Edit1.Text:=IntToStr(Tf(1)); {调用TestC函数}

end

else

ShowMessage('TestC函数没有找到');

finally

FreeLibrary(Th); {释放DLL}

end

else

ShowMessage('Cpp.dll没有找到');

end;



大家已经看到了,这种动态调用技术很复杂,但只要修改参数,如修改LoadLibrary('Cpp.dll')中的DLL名称为'Delphi.dll'就可动态更改所调用的DLL。



一、定义所要调用的函数或过程的类型。

在上面的代码中我们定义了一个TIntFunc类型,这是对应我们将要调用的函数TestC的。在其他调用情况下也要做同样的定义工作。并且也要加上stdcall调用参数。



二、释放所调用的DLL。

我们用LoadLibrary动态的调用了一个DLL,但要记住必须在使用完后手动地用FreeLibrary将该DLL释放掉,否则该DLL将一直占用内存直到您退出Windows或关机为止。



现在我们来评价一下两种调用DLL的方法的优缺点。静态方法实现简单,易于掌握并且一般来说稍微快一点,也更加安全可靠一些;但是静态方法不能灵活地在运行时装卸所需的DLL,而是在主程序开始运行时就装载指定的DLL直到程序结束时才释放该DLL,另外只有基于编译器和链接器的系统(如Delphi)才可以使用该方法。动态方法较好地解决了静态方法中存在的不足,可以方便地访问DLL中的函数和过程,甚至一些老版本DLL中新添加的函数或过程;但动态方法难以完全掌握,使用时因为不同的函数或过程要定义很多很复杂的类型和调用方法。对于初学者,笔者建议您使用静态方法,待熟练后再使用动态调用方法。



第五章 使用DLL的实用技巧 top



一、编写技巧。

1 、为了保证DLL的正确性,可先编写成普通的应用程序的一部分,调试无误后再从主程序中分离出来,编译成DLL。



2 、为了保证DLL的通用性,应该在自己编写的DLL中杜绝出现可视化控件的名称,如:Edit1.Text中的Edit1名称;或者自定义非Windows定义的类型,如某种记录。



3 、为便于调试,每个函数和过程应该尽可能短小精悍,并配合具体详细的注释。



4 、应多利用try-finally来处理可能出现的错误和异常,注意这时要引用SysUtils单元。



5 、尽可能少引用单元以减小DLL的大小,特别是不要引用可视化单元,如Dialogs单元。例如一般情况下,我们可以不引用Classes单元,这样可使编译后的DLL减小大约16Kb。



二、调用技巧。

1 、在用静态方法时,可以给被调用的函数或过程更名。在前面提到的C++编写的DLL例子中,如果去掉extern
"C"语句,C++会编译出一些奇怪的函数名,原来的TestC函数会被命名为@TestC$s等等可笑的怪名字,这是由于C++采用了C++
name mangling技术。这个函数名在Delphi中是非法的,我们可以这样解决这个问题:

改写引用函数为

function TestC(i:integer):integer;stdcall;

external 'Cpp.dll';name '@TestC$s';

其中name的作用就是重命名。



2 、可把我们编写的DLL放到Windows目录下或者Windows\system目录下。这样做可以在external语句中或LoadLibrary语句中不写路径而只写DLL的名称。但这样做有些不妥,这两个目录下有大量重要的系统DLL,如果您编的DLL与它们重名的话其后果简直不堪设想,况且您的编程技术还不至于达到将自己编写的DLL放到系统目录中的地步吧!



三、调试技巧。

1 、我们知道DLL在编写时是不能运行和单步调试的。有一个办法可以,那就是在Run|parameters菜单中设置一个宿主程序。在Local页的Host
Application栏中添上宿主程序的名字就可进行单步调试、断点观察和运行了。



2 、添加DLL的版本信息。开场白中提到了版本信息对于DLL是很重要的,如果包含了版本信息,DLL的大小会增加2Kb。增加这么一点空间是值得的。很不幸我们如果直接使用Project|options菜单中Version选项是不行的,这一点Delphi的帮助文件中没有提到,经笔者研究发现,只要加一行代码就可以了。如下例:



library Delphi;



uses

SysUtils,

Classes;



{$R *.RES}

//注意,上面这行代码必须加在这个位置



function TestDll(i:integer):integer;stdcall;

begin

Result:=i;

end;



exports

TestDll;



begin

end.



3 、为了避免与别的DLL重名,在给自己编写的DLL起名字的时候最好采用字符数字和下划线混合的方式。如:jl_try16.dll。



4 、如果您原来在Delphi 1或Delphi 2中已经编译了某些DLL的话,您原来编译的DLL是16位的。只要将源代码在新的Delphi
3或Delphi 4环境下重新编译,就可以得到32位的DLL了。



[后记]:除了上面介绍的DLL最常用的使用方法外,DLL还可以用于做资源的载体。例如,在Windows中更改图标就是使用的DLL中的资源。另外,熟练掌握了DLL的设计技术,对使用更为高级的OLE、COM以及ActiveX编程都有很多益处。



网友评论:就要引用ShareMem单元,而且必须是第一个引用的。既在uses语句后是第一个引用的单元。如下例:
uses
ShareMem,
SysUtils,
Classes;
还有一点,在您的工程文件(*.dpr)中而不是单元文件(*.pas)中也要做同样的工作,这一点Delphi自带的帮助文件没有说清楚,造成了很多误会。不这样做的话,您很有可能付出死机的代价。

设计MP3播放器的时候怎么样实现下一首 上一首功能的

话题2595956的标题是: 请问大侠们,在设计MP3播放器的时候怎么样实现下一首 上一首功能的!? (20分)
分类:多媒体 liutf200 (2004-05-06 17:02:00)
请问大侠们,在设计MP3播放器的时候怎么样实现下一首
上一首功能的!?或者是说在一首歌曲播放完了的时候怎样在文件列表里自动播放下一个MP3文件的!我暂时用的是通过TIMER控件来判断是不是到了曲尾,但是这样会出错!

蓝色幻想 (2004-05-06 17:06:15)
你可以先判斷他是否放完,放完後就下一首, 文件全部放在listbox中﹐下一首就取下一項的值就可以了

kouchun (2004-05-06 17:26:50)
好像是判斷:
MediaPlayer1.TrackLength[0]<=0
MediaPlayer1.TrackPosition[0]<=0

kouchun (2004-05-06 17:27:52)
也可以用
MediaPlayer1.Tracks=0 判斷...

刀剑如梦 (2004-05-06 22:51:33)
unit uPlayList;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IniFiles, MPlayer, ExtCtrls, MMSystem;

type
TfrmPlayList = class(TForm)
ListBox_PlayFiles: TListBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
OpenDlg_PlayList: TOpenDialog;
SaveDlg_PlayList: TSaveDialog;
AutoPlayTimer: TTimer;
procedure ListBox_PlayFilesDblClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure AutoPlayTimerTimer(Sender: TObject);
procedure FormShow(Sender: TObject);
private
procedure Init;
procedure PlayMedia; // 播放音频文件
procedure PlayPause; // 暂停当前播放文件
procedure PlayStop; // 停止当前播放文件
procedure PlayBack; // 倒退当前播放文件
procedure PlayStep; // 快进当前播放文件
procedure PlayPrev; // 播放上一曲目
procedure PlayNext; // 播放下一曲目
procedure AddPlayFile; // 添加播放列表文件
procedure DelPlayFile; // 删除播放列表文件
procedure ClearPlayFile; // 清空播放列表文件
procedure CDControl; // 控制CDROM开关
{ Private declarations }
public
FileIndex: Integer; // 播放文件的索引
FileCount: Integer; // 列表中文件总数
IsFileChange: Boolean; // 通知主窗口播放歌曲已改
FileLength: Longint; // 文件长度
FilePosition: Longint; // 当前播放的帧数
Drive: char; // 光驱盘符
IsCDOpen: Boolean; // 光驱是否打开
FileListName: TIniFile; // 列表文件关联名
IsPlayingPause: Boolean; // 暂停控制
{ Public declarations }
end;

var
frmPlayList: TfrmPlayList;

implementation

uses uEPlayer;

{$R *.dfm}

procedure TfrmPlayList.ListBox_PlayFilesDblClick(Sender: TObject);
var
Index: Integer;
begin
Index := ListBox_PlayFiles.ItemIndex;
if Index < 0 then Exit;
if Index = FileIndex then Exit;
frmEPlayer.MediaPlayer.Close;
FileIndex := Index;
FileListName.WriteInteger('播放文件', '文件号', FileIndex);
PlayMedia;
end;

procedure TfrmPlayList.Button1Click(Sender: TObject);
begin
{OpenDlg_PlayList.Filter := 'WMA播放文件|*.wma|MP3播放文件|*.mp3';
OpenDlg_PlayList.InitialDir := ExtractFileDir(Application.ExeName) +
'\PlayList\';
if OpenDlg_PlayList.Execute then
begin
ListBox_PlayFiles.Items.AddStrings(OpenDlg_PlayList.Files);
end;}
AddPlayFile;
end;

procedure TfrmPlayList.Button3Click(Sender: TObject);
begin
ClearPlayFile;
end;

procedure TfrmPlayList.Button2Click(Sender: TObject);
begin
DelPlayFile;
end;

procedure TfrmPlayList.PlayMedia;
var
ExtName: string;
begin
with frmEPlayer.MediaPlayer do
begin
if Mode = mpOpen then Close; //如果正在播放,则关闭
FileName := FileListName.ReadString('文件列表', 'No.[' +
IntToStr(FileIndex) + ']','');
try
Open;
ExtName := ExtractFileExt(FileName);
if (StrIComp(PChar(ExtName), '.mpg') = 0) or
(StrIComp(PChar(ExtName), '.dat') = 0) or
(StrIComp(PChar(ExtName), '.avi') = 0) or
(StrIComp(PChar(ExtName), '.asf') = 0) then
begin
//frmEPlayer.MediaPlayer.Display := frmMovie.Panel_DisPlay;
//frmEPlayer.MediaPlayer.DisplayRect :=
frmMovie.Panel_DisPlay.ClientRect;
//frmMovie.Visible := True;
end
else
begin
//frmEPlayer.MediaPlayer.Display := nil;
//frmMovie.Visible := False;
end;
TimeFormat := tfMilliseconds;
Position := 0;
IsFileChange := True;
Play;
//PlayingPause := False;
except
MessageDlg('无法打开或者播放此文件!',mtError,[mbOK],0);
end;
end;
end;
// 播放下一曲目
procedure TfrmPlayList.PlayNext;
begin
if FileIndex >= FileCount - 1 then Exit;
FileIndex := FileIndex + 1;
ListBox_PlayFiles.ItemIndex := FileIndex;
FileListName.WriteInteger ('播放文件', '文件号', FileIndex);
PlayMedia;
end;
// 添加播放列表文件
procedure TfrmPlayList.AddPlayFile;
var
I: Integer;
begin
OpenDlg_PlayList.Filter :=
'音频文件(*.WAV,*.MP3,*.WMA,*.MID,*.RMI,*.CDA)|*.WAV;*.MP3;*.WMA;*.MID;*.RMI;*.CDA|视频文件(*.MPG,*.AVI,*.DAT,*.ASF,*,MPEG)|*.MPG;*.AVI;*.DAT;*.ASF;*.MPEG|所有文件(*.*)|*.*';
if OpenDlg_PlayList.Execute then
begin
with OpenDlg_PlayList.Files do
for I := 0 to Count - 1 do
begin
ListBox_PlayFiles.Items.Add(Strings[I]);
FileListName.WriteString('文件列表', 'No.[' + IntToStr(FileCount +
I) + ']', Strings[I]);
end;
FileIndex := FileCount;
ListBox_PlayFiles.ItemIndex := FileIndex;
//ListBoxScrollar(Sender);
FileCount := FileCount + OpenDlg_PlayList.Files.Count;
FileListName.WriteInteger('播放文件', '文件号', FileIndex);
FileListName.WriteInteger('播放文件', '文件数', FileCount);
PlayMedia;
end;
end;
// 删除播放列表文件
procedure TfrmPlayList.DelPlayFile;
var
Index : Integer;
begin
if FileCount <= 0 then Exit; // 如果列表中为空则退出
Index := ListBox_PlayFiles.ItemIndex;
if Index < 0 then Exit; // 如果没有选择则退出
// 如果被删除的是当前正在播放的音乐,则关闭音乐
if frmEPlayer.MediaPlayer.FileName =
ListBox_PlayFiles.Items.Strings[Index] then
begin
frmEPlayer.MediaPlayer.Close;
FileIndex := -1;
FileListName.WriteInteger('播放文件', '文件号', FileIndex);
end;
// 从列表中删除
ListBox_PlayFiles.Items.Delete(Index);
// 列表文件总数减一
FileCount := FileCount - 1;
if FileCount = 0 then
begin
FileIndex := -1;
FileListName.WriteInteger('播放文件', '文件号', FileIndex);
end;
if Index = FileCount then
ListBox_PlayFiles.ItemIndex := 0
else
ListBox_PlayFiles.ItemIndex := Index;

FileListName.WriteInteger('播放文件', '文件数', FileCount);
for Index := Index to FileCount - 1 do
begin
FileListName.WriteString ('文件列表', 'No.[' + IntToStr(Index) + ']',
ListBox_PlayFiles.Items.Strings[Index]);
end;
//ListBoxScrollar(Sender);
FileListName.DeleteKey('文件列表', 'No.[' + IntToStr(FileCount) + ']');
end;

procedure TfrmPlayList.Init;
var
I: Integer;
TmpName: string;
begin
FileListName := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'EPlayer.ini');
// 建立列表文件关联
FileCount := FileListName.ReadInteger('播放文件', '文件数', 0);
for I := 0 to FileCount - 1 do
begin
TmpName := FileListName.ReadString('文件列表', 'No.[' + IntToStr(I) + ']', '');
ListBox_PlayFiles.Items.Add (TmpName);
end;
FileIndex :=FileListName.ReadInteger('播放文件', '文件号', -1);
ListBox_PlayFiles.ItemIndex := FileIndex;
//ListBoxScrollar(Sender);
{for I := Ord('A') to Ord('Z') do
begin
Drive := Chr(I);
if GetDriveType(PChar(Drive + ':\' + #0)) = DRIVE_CDROM then
Break;
end;}
end;
// 清空播放列表文件
procedure TfrmPlayList.ClearPlayFile;
begin
if FileCount <= 0 then exit; //如果列表中为空则退出
frmEPlayer.MediaPlayer.Close;
FileCount := 0;
FileIndex := -1;
FileListName.WriteInteger('播放文件', '文件数', FileCount);
FileListName.WriteInteger('播放文件', '文件号', FileIndex);
FileListName.EraseSection('文件列表');
ListBox_PlayFiles.Items.Clear;
end;


procedure TfrmPlayList.FormCreate(Sender: TObject);
begin
Init;
end;

procedure TfrmPlayList.AutoPlayTimerTimer(Sender: TObject);
begin
if frmEPlayer.MediaPlayer.Mode = mpPlaying then
if frmEPlayer.MediaPlayer.Position >=
frmEPlayer.MediaPlayer.Length - 1000 then
PlayNext;
end;
// 控制CDROM开关
procedure TfrmPlayList.CDControl;
begin
if IsCDOpen then
begin
MciSendString('set cdaudio door closed', nil, 0, 0);
IsCDOpen := False;
end
else
begin
MciSendString('set cdaudio door open', nil, 0, 0);
IsCDOpen := True;
end;
end;
// 倒退当前播放文件
procedure TfrmPlayList.PlayBack;
begin
with frmEPlayer.MediaPlayer do
begin
if not(Mode in [mpPlaying]) then Exit;
Pause;
Position := Position - 6000;
Play;
end;
end;
// 暂停当前播放文件
procedure TfrmPlayList.PlayPause;
begin
with frmEPlayer.MediaPlayer do
begin
if Mode in [mpOpen, mpPlaying] then Pause
else if Mode in [mpOpen, mpPaused] then Resume;
end;
end;
// 播放上一曲目
procedure TfrmPlayList.PlayPrev;
begin
if FileIndex <= 0 then Exit;
FileIndex := FileIndex - 1;
ListBox_PlayFiles.ItemIndex := FileIndex;
FileListName.WriteInteger('播放文件', '文件号', FileIndex);
PlayMedia;
end;
// 快进当前播放文件
procedure TfrmPlayList.PlayStep;
begin
with frmEPlayer.MediaPlayer do
begin
if not(Mode in [mpPlaying]) then Exit;
Pause;
Position := Position + 6000;
Play;
end;
end;
// 停止当前播放文件
procedure TfrmPlayList.PlayStop;
begin
with frmEPlayer.MediaPlayer do
begin
if Mode in [mpStopped] then Exit;
Close;
end;
end;

procedure TfrmPlayList.FormShow(Sender: TObject);
begin
Self.Top := 170;
Self.Left := Screen.Width div 2 - Self.Width div 2;
end;

end.

liutf200 (2004-05-31 17:56:25)
谢谢,此单元很好!!
但是我的意思是当顺序播放的时候的自动转到下一首是怎么样来实现比较好啊!我现在是通过TIMER控件来判断播放是否到了尾处,但是这样有时候会出错,出现没有MCI设备的错误!
也就是说白了,就像别的播放器一样,如果没有人控制,怎么样实现它一直按顺序播放下去!?

刀剑如梦 (2004-06-01 22:50:12)
http://www.2ccc.com/article.asp?articleid=1068
各位编程爱好者:
EPlayer简易播放器示例程序。
程序的测试环境:Delphi6.0操作系统是Windows XP,涉及到相关应用技巧有:
(1)API,左右声道的控制都使WindowsAPI的调用.
(2)Delphi的Mediaplay控件的调用.
(3)MMSystem接口的引用.
(4)OpenDialog打开文件.
(5)利用配置文件进行文件信息的列表保存.
(6)TrackBar使用,用来控制声音与进度条.
(7)Panel用来显示当前播放的一些信息.
(8)MCI Command string是多媒体设备的程序接口.
示例程序中存在许多不足之处,有兴趣的网友可以完善它。
整个示例程序的内容就是如此,希望对初学者有一些帮助吧。
如有可能,邮上一份完善的代码。yckxzjj@163.com[刀剑如梦]
 

乔 向阳

职业
地点
兴趣
找不到第二个一样的。
作者 
作者 
作者 
作者 
尚未添加列表。
种花  
第 1 张,共 1 张