2006-12-24

50 Beautiful CSS-Based Web-Designs in 2006

2006 was rich on creative, beautiful and unusual design concepts. We’ve seen a lot of whitespace, many examples of readable and usable text-design, badges, stars, rounded corners, shapes, gradients, mirror and 3D-effects - just name it. Let’s take a close look at some of the most beautiful designs we’ve seen inn in 2006.

Some gorgeous designs are missing? Let us know - comment on this article!

Vibrant Designs


SteveLeggat.com


Emotionslive.co.uk


Dinis91.com


WeCreateThings.com


Joyent.com


Haveamint.com


Vivabit.com


olivier.danchin.neuf.fr


Foxie.ru


Cameronmoll.com/portfolio


Tonyyoo.com/v2


Komodomedia.com


Bartelme.at


Quatuour.be


Onlinecenter.nu


Fall.tnvacation.com


Zero.ru


Methodarts.com


Summer.tnvacation.com


Icebrrg.com

Dark Designs


Kineda.com


Colourmod.com


Rikcat.com


BeSuperCharged.com


M122arts.com


Rudeworks.com


Veerle.duoh.com


Obuweb.com


Slideshowpro.net


Whitwa.net

Light Designs


Mstefan.com


Subdued.net


Devlounge.net


Dartadesign.ro


Theologisches-seminar-elstal.de


Nice-Design.co.uk


Media2006


ElectricPulp.com


SusannePaschke.de


PixelEden.net


Jek2k.com


Thegoodness.com.au


Morellc.com


Attitudedesign.co.uk


CSS Vault


Evaneckard.com


WallopCreative.com


Jeffcroft.com

Web 2.0 how-to design style guide

Summary of features covered

The list below is a summary of many of the common features of typical "Web 2.0" sites.

Clearly, a site doesn't need to exhibit all these features to work well, and displaying these features doesn't make a design "2.0" - or good!

I've already addressed some of these factors in my introductory Current Style article.

Disclaimer

Not all these design features are appropriate in all cases. There are always exceptions, and there are lots of bad examples of these features being used wrongly, over-used, or done without sensitivity to the "symphony" of a site's design.

You can't just take all these elements, throw them together and make a good web page, any more than you can take some eggs, sugar, flour and throw them together and get a cake.

Making a web page that works requires a lot of sensitivity to the various forces at work. A good design solution is one that balances those (often opposing) forces.

Web 2.0 ?!

I'm using the term "Web 2.0 design" to describe the prevailing style of web design I introduce in my current style article.

Many people use the term "Web 2.0" to describe:

  • a resurgence in the web economy
  • a new level of technological interactivity between web sites and services
  • or social phenomena deriving from new types of online communities and social networks

Many others also use the term in reference to a recent school of web design. I'm comfortable with using it in that context here.

In sociological terms, movements impact people on many levels: economic, cultural, political, etc. Is skate-punk about entertainment and sport, music and the music industry, fashion, or the breakdown of society?

Introduction

I'm going to take you through the features of the current wave of excellent web site designs, dissect the most significant features, explain why each one can be good, and show you how to use them in your own sites.

If I had to sum up "Web 2.0" design in one word, it would have to be "simplicity", so that's where we'll start.

I'm a great believer in simplicity. I think it's the way forward for web design.

Today's simple, bold, elegant page designs deliver more with less:

  • They enable designers to shoot straight for the site's goals, by guiding the site visitor's eye through the use of fewer, well-chosen visual elements.
  • They use fewer words but say more, and carefully selected imagery to create the desired feel.
  • They reject the idea that we can't guess what people want from our sites

1Simplicity

"Use as few features as are necessary to achieve what you need to achieve"

Web design is simpler than ever, and that's a good thing.

2.0 design means focused, clean and simple.

That doesn't necessarily mean minimalist, as I'll explain later.

I really believe in simplicity. That's not to say that all web sites should be minimal, but that we should use as few features as are necessary to achieve what you need to achieve.

I've written elsewhere about Occam's Razor, which is a principle I use all the time. One way of interpreting it is: Given any two possible solutions to a problem, the simpler one is better.

Here are some examples. Note how unnecessary elements have been stripped out from each. There could be a lot more on each page than there is... but would that make them stronger?

The result is that you have to look at the content. You find yourself interacting with exactly the screen features the designer intended. And you don't mind - it's easy, and you get just what you came for.

Mozilla store Medicon Media Etre Simplebits Artypapers Real Meat

Why simplicity is good

  • Web sites have goals and all web pages have purposes.
  • Users' attention is a finite resource.
  • It's the designer's job to help users to find what they want (or to notice what the site wants them to notice)
  • Stuff on the screen attracts the eye. The more stuff there is, the more different things there are to notice, and the less likely a user is to notice the important stuff.
  • So we need to enable certain communication, and we also need to minimise noise. That means we need to find a solution that's does its stuff with as little as possible. That's economy, or simplicity.

When & how to make your designs simple

When?

Always!

How?

There are two important aspects to achieving success with simplicity:

  1. Remove unnecessary components, without sacrificing effectiveness.
  2. Try out alternative solutions that achieve the same result more simply.

"It seems that perfection is reached not when there is nothing left to add, but when there is nothing left to take away."

Antoine de Saint-Exupéry,
Terre des hommes, 1939

Whenever you're designing, take it as a discipline consciously to remove all unnecessary visual elements.

Concentrate particularly on areas of the layout that are less relevant to the purpose of a page, because visual activity in these areas will distract attention from the key content and navigation.

Use visual detail - whether lines, words, shapes, colour - to communicate the relevant information, not just to decorate.

Here's an example of a design that suffers from not enough simplicity.

Yaxay's interface uses a lot of pixels, but the vast majority of them are decorative, part of the page background. Relatively few pixels are used to user to find or understand information or interact with the site.

Yaxay is busy and ineffective Yaxay detail

See how much "stuff" there is to look at, and notice how few of the pixels are used to clarify actual navigation, actual content, or actual interactive features.

Edward Tufte is the boss when it comes to the design of information. He uses the terms "data ink" (i.e. detail that enables information transfer) and "non-data ink" (i.e. detail that's just detail) to describe this phenomenon.

One way Tufte specifically measures the effectiveness of information design (graphs, charts, presentations etc.) is using the ratio of data-ink to non-data-ink. The higher the proportion of data-ink used, the more likely it is that a design is effective.

Taking the Yaxay detail above, there's a lot of what I call "busyness", i.e. a lot of edges, tonal changes, colour variations, shapes, lines... a lot of stuff to look at. But, in this detail, the only useful features are:

  1. The site logo, and
  2. the label on the nav button (which reads "art gallery")

All the rest of the "busyness": the shapes in the background, the diagonal lines in the interface panel, the grid, the gradients... all this is noise, it's all "non-data ink", because it's not enabling communication.

I'm not against richness, complexity or beauty in web design

Simplicity means:

Use as many pixels as you need, in whatever way you need, to facilitate the communication that needs to happen.

Of course, often what you're communicating isn't hard data, but soft information.

Hard data
means facts, like news, stock prices, train times, or how much money is in your bank account...
Soft information
covers the qualitative aspects of communication, like the first impression about the quality of a company, the sense of how approachable a service provider is, and whether you feel a product will be right for you. It can be just as important!

Whether what you're communicating is hard or soft, your pixels count, so use them consciously and with care.

Take the example below:

Alex Dukal, illustrator

Alex Dukal's site is rich, interesting and appealing. It uses a range of visual techniques to draw your attention, make you interested and to give you a warm feeling about the quality of Alex's work.

But it's also simple, because it uses its pixels/ink/busyness with care and sensitivity. It's not gratuitous, it's economical and rich.

Whatever you're saying, choose wisely where you use your ink/pixels. Use it to communicate, first and foremost. Then, ask whether you can communicate just as effectively with less. If so, do it.

2Central layout

(More about this on the Current Style page). Basically, the vast majority of sites these days are positioned centrally within the browser window. Relatively few are full-screen (liquid) or left-aligned / fixed-size, compared to a few years ago.

Why a central layout is good

This "2.0" style is simple, bold and honest. Sites that sit straight front & center feel more simple, bold and honest.

Also, because we're being more economical with our pixels (and content), we're not as pressurised to cram as much information as possible above the waterline/fold.

We're using less to say more, so we can be a bit more free and easy with the amount of space used, and pad out our content with lots of lovely white space.

When & how to use a central layout

I'd say, position your site centrally unless there's a really good reason not to.

You may be wanting to get more creative with the space, or get as much information on-screen as possible (for example with a web app).

3Fewer columns

A few years ago, 3-column sites were the norm, and 4-column sites weren't uncommon. Today, 2 is more common, and 3 is the mainstream maximum.

Why using fewer columns is good

Less is more. Fewer columns feels simpler, bolder, and more honest. We're communicating less information more clearly.

There's also a by-product of the domination of centered layouts. Because we're not filling the whole screen so much, and not trying to get as much on-screen at any one time, we simply don't need as many columns of information.

37 Signals' home page

37Signals have always been at the front when it comes to questioning the status quo and coming up with simple answers.

Here, they use 2 columns. This a great case study in simplicity. It lets the message speak, and adds nothing that could get in the way.

Apple Expo

Apple is the other leader in elegant simplicity.

This kind of layout works really, really well. Each time I experience Apple's simple design, the more convinced I become that its zen approach is the holy grail of design.

This typical Apple layout shows that someone has honestly asked, "How many boxes/columns/lines do we really need?". Then they've boldly edited out unnecessary elements, and the result is undeniably the cleanest, most effective communication.

How to choose your columns

I'd definitely recommend using no more than 3 columns, simply because you should use no more of anything than you need to.

There are always exceptions, so here are a few examples of more than 3 columns used effectively.

Derek Powazek's blog

Derek Powazek's blog site uses 3 columns for the main section of his blog, but 4 lower down.

The lower section is a kind of pick & mix, where the abundance of columns emphasises the "Take what you like" feel.

Amazon.co.uk

Amazon (UK) has two side columns, and products arranged centrally in 3 additional columns.

It works beacuse the purpose of each column is clear from its design. The left col is definitely navigation; the right column is "other stuff". The products in the middle are clearly tiled and separated by white space, so they don't overwhelm.

Popurls.com screenshot

Popurls.com contains loads of pick-n-mix information, collating the hot links from other sites like digg and del.icio.us, but it still keeps to 3 columns for the main blocks of text.

Further down, it shows thumbnails of popular images on the photo-sharing site Flickr (and there are Youtube vids later). These are tiled in several columns, which is fine, because it's a sit-back, scan and pick your experience moment...

And here's a site that gets it wrong...

All things web 2.0 has 2 much

Here's All Things Web2.0 using 4 columns: 2 side columns and 2 central columns.

The downside of this layout is that you don't know where to start looking. Everything is somehow low-priority (partly because of the darkish background).

As we saw, Amazon differentiates the page to this extent, but the design helps you instantly identify what each area of screen real-estate is for, so it's not confusing.

4Separate top sections

This means making the top of the screen (the main branding & nav area) distinct from the rest (the main content).

Of course, there's nothing new about this approach. It's a good idea, and has been used for ever. But it's being used more than ever now, and the distinction is often stronger.

See how clear the "page-tops" are in these 6 samples, even at small scale:

Simplebits Mozilla store Medicon Media Curve2 Alsa Crétions Tony Yoo's Protolize

Why distinct top sections are good

The top section says "Here's the top of the page". Sounds obvious, but it feels good to know clearly where the page starts.

It also starts the site/page experience with a strong, bold statement. This is very "2.0"-spirited. We like strong, simple, bold attitude.

2 of these top-sections contain just branding (Protolize, Mediconmedia), 1 has just navigation (Cross Connector), and the remaining 3 have both.

The weakness of Cross Connector, in my view, is that the logo comes after the nav. I prefer the nav to be high-up, and clear (like e.g. Simple Bits).

When & how to use a distinct top section

On any site, both the main branding and main navigation should be obvious, bold and clear.

So it's a good idea to create a clear space at the top of a web site design that positions the logo and nav boldly.

Always put your logo right up the top of the screen. I'd always recommend putting your main navigation right after it.

It's definitely a good thing to mark the top of the page with a section that marks out the high-level screen features as separate from the main site content.

The top section should be visually distinct from the rest of the page content. The strongest way to differentiate is to use a bold, solid block of different colour or tone, but there are alternatives.

Here are 2 examples where the top section is separated with a solid line, rather than being solid colour itself.

London Pain Consultants Ex Blogs

And here, the top section contents simply sit boldly outside the main column area.

Aurum Newtech Steinruck Design

5Solid areas of screen real-estate

Leading on from the clearly differentiated top area, you'll notice that lots of sites define the various areas of real-estate boldly and clearly.

Real estate comes in various forms, including:

  • Navigation
  • Background / canvas
  • Main content area
  • Other stuff
  • Callouts / cross-links

It's possible to design a web page so that these areas are immediately distinct from their neighbours.

The strongest way to do this is using colour.

Medicon Media Jeremy Boles' blog Ex Blogs Curve2

But white space can be just as effective.

The risk with strong colour is that it draws the eye, so it can take attention away from other relevant screen elements.

I think that placing clean content on white space creates an easier experience, helping the viewer to feel more relaxed and free to browse.

Apple Expo Etre

6Simple nav

Permanent navigation - your global site nav that appears on every page as part of the page template - needs to be clearly identifiable as navigation, and should be easy to interpret, target and select.

  • 2.0 design makes global navigation large, bold, clean and obvious.
  • Inline hyperlinks (links within text) are typically clearly differentiated from normal text.
Navigation from TradingEye Navigation from Cross Connector Navigation from Mozilla Navigation from London Pain Consultants Navigation from Protolize

Why simple navigation is better

Users need to be able to identify navigation, which tells them various important information:

  • Where they are (in the scheme of things)
  • Where else they can go from here
  • And what options they have for doing stuff

Following the principle of simplicity, and general reduction of noise, the best ways to clarify navigation are:

  • Positioning permanent navigation links apart from content
  • Differentiating navigation using colour, tone and shape
  • Making navigation items large and bold
  • Using clear text to make the purpose of each link unambiguous

How to keep your nav simple

Simply remember the key: navigation should be clearly distinguishable from non-navigation.

Just follow the guideliunes above, regarding differentiation through position, colour and clarity.

My article about navigation »

Inline hyperlinks should also stand out sufficiently from the text around them.

Check out these snippets. In each case, you're in do doubt what's a link. (Personally, I prefer using blue text (non-underlined) which turns to underlined red on hover...)

7Bold logos

A clear, bold, strong brand - incorporating attitude, tone of voice, and first impression - is helped by a bold logo.

Here are some (100% scale). Notice that logos are tending to be quite large, in line with the general 2.0 principles.

Collection of strong logos

Why?

Strong, bold logos say "This is who we are." in a way that we can believe.

When & how?

See my articles on logos and text-based logos.

It's very hard to say how to create a good logo, but in brief...

Your logo should:

  • work visually in its main context, and any other uses in which it may be used (like flyers or t-shirts?)
  • be recognisable and distinctive
  • represent your brand's personality and qualities on first viewing

8Bigger text

Lots of "2.0" web sites have big text, compared to older-style sites.

If you fill the same amount of space with less "stuff", you have more room.

When you've made more room, you can choose to make more important elements bigger than less important elements (if they're still there).

Making things bigger makes them more noticeable then lesser elements. This effect has been used throughout the history of print design, on headings, title pages and headlines.

Not only does big text stand out, but it's also more accessible to more people. That's not just people with visual impairments, but also people looking on LCD screens in sunlight, people sitting a little further from the screen, and people just skimming the page. If you think about it, that could be quite a lot of people!

Browse Happy 37 Signals' home page Mozilla store Aurum Newtech

When & how to use big text

Big text makes most pages more usable for more people, so it's a good thing.

Of course, size is relative. You can't take a normal, busy site, make ALL the text bigger, and make it more usable. That might not work, that might be worse.

In order to use big text, you have to make room by simplifying, removing unnecessary elements.

You also need to haave a reason to make some text bigger than other text. And the text must be meaningful and useful. There's no point adding some big text just because it's oh-so 2.0!

If you need to have a lot of information on a page, and it's all relatively equal in importance, then maybe you can keep it all small.

9Bold text introductions

Leading on from the big text theme, many sites lead with strong all-text headline descriptions.

These normally set out the site's USP, elevator pitch or main message.

They tend to be graphical, rather than regular text. The reason for this is that designers want a lot of control over the page's visual impact, especially early on in a browsing experience.

Apple.com 37 Signals' home page Ex Blogs Cross Connector

When & how to use a bold text intro

Only use one if you've got something bold to say.

If you have a simple message that you want to be seen first, go ahead and headline it. Make it clear by putting it against a relatively plain background.

10Strong colours

Bright, strong colours draw the eye. Use them to divide the page into clear sections, and to highlight important elements.

When you have a simple, stripped-out design, you can use a bit of intense colour to help differentiate areas of real-estate and to draw attention to items you want the visitor to notice.

Treo mobile

The Treo Mobile site uses 3 areas of strong colour to mark out and advertise 3 main areas of the site.

The background colour makes it clear that this isn't main content, and large, bold title text helps you see quickly what's in each one, so you can decide whether it interests you.

Colorschemer

Colorschemer sections the page with bands of intense, bright, cheerful colour, set against a more neutral background.

Apple.com home

Apple's design has always used a great balanced combination of tone (darks), rich effects and colour to draw the eye.

It may be the most perfectly designed web site there is, in my opinion.

In this image, the intense dark areas and strong colour are used sparingly to pick out important content.

Colour is also a great medium for communicating brand values

Real Meat

Here, the colour isn't bright, but it is strong, partly because of the amount of green used.

This design uses green to communicate the values of "quality" and "health".

Note: site design doesn't match this image!

Gear for girls

This site sells outdoor clothes exclusively for females, and the soft colours reinforce the chosen brand personality.

Be careful to use intense colour on or around high-value features

Giddy Kippa

A nice, effective page design is compromised by the use of large areas of intense colour outside the main page area.

The result is that the eye is drawn away from the real content.

Aurum Newtech

The Aurum Newtech site risks the same effect, but the colour is just pale enough to keep the content noticeable.

Also, the big, bold and well-spaced content elements help draw attention away from the "attractive" background.

Remember to use sparingly

If you're using strong colours to attract the eye, it only works if there's lots of area that isn't strongly coloured.

If everything is trying to attract the eye, then the eye just gets confused, and the site will feel confusing and chaotic.

11Rich surfaces

Most 2.0-style sites use subtle 3D effects, sparingly, to enhance the qualitative feel of the design.

We all know that these little touches just feel nice, but we may not know why.

Realistic surface affects like drop-shadows, gradients and reflections help make a visual interface feel more real, solid and "finished".

They may also remind us of certain tactile or aesthetic qualities of real-world objects, such as water droplets, shiny plastic buttons, and marble floors.

When & how to use rich surfaces

The golden rule here is to use with care, and not to overdo it.

As I explain in the tutorial on 3D Effects, these effects should not be applied to everything.

Like any of these techniques, a rich surface may add value to your design when used sensitively and appropriately.

If your navigation/icon/logo/layout sucks fundamentally, you can't polish your way out. Get the fundamentals right first.

It can also be important to maintain a consistent light-source. Although this can get more complex with the illusion of back-lit diffusion in buttons etc., you still know whether an overall design feels consistent.

3D effects can also make elements seem to stand out from the page, but only if the rest of the page is relatively flat.

Avoid trying to make your entire design 3D-realistic because:

  • It's more work
  • It will increase the overall size of the page assets
  • And you don't need to. 3D effects use lots of different pixels, and different pixels should be used deliberately to draw the visitor's attention to key content elements, or to enhance "soft" informational aspects. A little goes a long way.

12Gradients

Web 2.0 design has more gradients than the Alps.

Why gradients are so useful

Gradients soften areas that would otherwise be flat colour/tone.

Artypapers

They can create the illusion of a non-flat surface, used to good effect on Alex Dukal's portfolio.

Aurum homepage

Gradients can be used to fade a colour into a lighter or darker tone, which can help create mood.

Artypapers

In page backgrounds, they may also create an illusion of distance.

A common gradient combo is blue-to-white, which evokes the effect of aerial perspective, creating the sense that the background fades away towards the horizon.

They are commonly used at the very top of page backgrounds, where they help denote the boundary of the viewable area.

Colorschemer Alex Dukal, illustrator

They're also an integral part of drop-shadows, and the inner-glows and specular highlights you see on glass- or plastic-style buttons.

Note that gradients usually work best when juxtaposed with areas of flat colour or tone.

Curve2

On the Curve2 homepage, the gradients are more effective because each one is positioned adjacent to a flat white or grey section.

It's common to find gradients enhancing the base colour (using mix effects like color-burn or overlay in Photoshop), which create subtly different hues.

Here, the highlighted green colour is warmer and friendlier than the darker base colour. The overall effect is both softer and richer.

13Reflections

The illusion of reflection is one of the most common applications on gradients.

These commonly come in 2 kinds:

  • Highlights caused by light reflecting on shiny surfaces
  • That shiny table effect!

Specular highlights

Realistic effects of water droplets, glass beads, shiny plastic buttons etc. have been very popular over the past couple of years.

I don't know where the trends started, but Apple's web site must have been one of the most influential, preceding their Aqua interface look & feel.

Here are some examples:

The classic Apple.com shiny plastic tabs, still in use today.

These use highlights caused by a light source above the tabs, combined with an inner, diffuse glow that creates the plastic effect.

These tabs, from one of my recent redesigns, have a polished (from the strong white highlight) carbon-fibre appearance. The carbon effect comes from the warm diagonal-stroke pattern from the icon's glow.

More nice shiny plastic. Notice how the reflections fall off at the edge of the shape, which create the illusion of rounded edges.

Similar effect on a square shape looks like a badge.

The non-horizontal angle creates a sense of dynamism.

This shiny button from cafepress.com uses a rounded reflection that suggests a wide light source coming off a rounded surface.

This button from web hosts Mediatemple has a more diffuse reflection, suggesting a matt glass finish.

That shiny table effect!

Pioneered by Apple again (I'm sure). This is a really nice effect which is so prevalent now, it's in danger of being overused, now starting to look tired and is falling out of favour with designers.

Remeber, of course, that web designers are usually more sensitive to these things, so even if we're getting turned off by it, the general public may still think it's cool for some time to come.

The standard Apple look. Greyed-out and fading on a white base.

On a coloured background

Fading out to either side (my one this, not published yet)

More extreme angle, and a rich layered effect reflecting the colour of the solid object

Here's how to do it (from photoshoplab.com) »

14Cute icons

Icons play an important role in Web 2.0 design. Today we use fewer, better icons that carry more meaning.

Icons can be useful when they're easily recognisable and carry a clear meaning. In lots of other cases, a simple word is more effective.

In the old days, icons were sometimes overused. It seemed that everyone wanted an icon for every navigation link or tab. Now, we use clear text more extensively, and are less ready to litter a page with icons.

Where 2.0 designers do employ icons, they are reserved for higher-value spots, where .

Simpler, more spacious designs demand less attention and allow for a richer icons.

Some examples, demonstrating various attributes.

Simple and clean

Cute and quirky

Do not necessarily have to feature tiny hills!

37 Signals Overture

Richly detailed

Creatively inspired by Mac OSX. See Enhanced Labs for a great showcase.

15Star flashes

These are the star-shaped labels that you see stuck on web pages, alerting you to something important.

They work by evoking price stickers in low-cost stores. For this reason, they suit the start-up ethic of many 2.0 sites, but for the same reason may cheapen other sites.

They can really work well, but of course should only be used to draw attention to something important.

I'd recommend only using one on a page (at most!).

Another style that's seeming over-used, and will probably run its course over the next year.

To find out how to do it in Photoshop, go here and scroll halfway down (from photoshoplab.com) »

2006-12-21

一篇被禁6年的狂文:中国应当复仇(中国报道电子杂志 原作者Cose)

新加坡联合早报网中日关系论坛12月16日转贴了中国某爱国青年在1995年写的一篇热血文章:中国应当复仇。

蓝 色海湾网站12月6日的转贴者介绍说:“据说这可是被禁了六年的狂文啊,尽管不知道是否属实,可是从这篇文章里我们听到了和平常听到的不一样的声音,绝对 值得一看!!!对付那样的东西没有强硬一点儿的手段是不行滴,想当年我们也是因为答应了朝鲜战争和两弹一星的成就才能有现在这样的地位。所以说,人的骨子 里是欺软怕硬的,别老是有那么多的幻想,美国人现在的地位是在经济优势下打出来的,不是宣传出来的。”现转载全文如下。

一 楔 子

1953年3月,刚刚被立为太子的明仁便秉父命出访英国,参加伊丽莎白女王的加冕典礼。当时,英国《每日邮报》的民意测验表明,反对日本皇太子出席女王加冕典礼的人竟高达68%。有人甚至提出:“将皇太子扣作人质,直到日本支付对被俘英国人的赔偿为止。”

1971 年10月12日,日本裕仁天皇夫妇访问波恩时,许多德国留学生和在这里侨居的亚洲人,毅然举行了反对天皇来访的大示 威。那时,德国学生散发了标题为“战争罪犯裕仁在波恩”的传单。他们高举的标题上有的写着“希特勒屠杀了六百万犹太人,裕仁屠杀了五千万亚洲人!”这些学 生不顾警察的制止,还反复高喊“裕仁是法西斯分子”的口号。

1971年裕仁访问荷兰时曾引起暴力抗议示威,因为在二次大战中,日本侵略军占领东印度(现在的印度尼西亚),把11.7万荷兰人关押在军事集中营里,死难1.9 万人。

1974年8 月30日,日本“东亚反日武装战线”获悉裕仁要到三菱重工大楼视察时,决定刺杀裕仁,但由于计划不周,他们将炸弹错投到人行道上,造成8人死亡,165 人受伤的惨剧。大道寺和意永利明等人被捕。

以 上是我随便选的几件事例。从这里可以看出外国人的民族主义是很强的,其民族性格是很剽悍的;同时他们也是很清醒的,认识到了裕仁是二战时日本的真正战争元 凶。虽然日本给中国带来的灾难与耻辱远远要多似其他国家,但要想使中国发生类似 上述的事,简直是不可能的。对此,我们中国人该做何感想呢?中国人不但改换了日本的战争元凶,把他说成是东条英机,而且把日本的战争责任也完全推卸给日本 的统治阶级,毫不怪罪日本人民。

中国千方百计地为日本人民(实际上也是为日本民族)洗刷罪名。中国说:日本人民是友好的、善良的、爱 好和平的、反对战争的;日本侵略中国,屠杀中国人民,奸淫中国妇女,其责任在于日本统治阶级;拥护战争的日本人只是少数;日本人由于生长在日本的特定的社 会环境和历史环境下才养成了好战思想,从而才拥护并参与日本的侵略战争的,日本人民没有战争责任。

那么,事实又如何呢?

二 日本人民有战争责任

整 个日本民族都有战争责任众所周知,日本妇女在二次大战时为了向日本帝国主义效劳,竟甘愿做慰安妇,让屠杀中国人民、强奸中国妇女的“皇军”在她们身上发泄 兽欲,搏取快乐,“慰安”他们枯燥的心和枯燥的生活,同时使他们更有劲更有趣地屠杀中国人民,强奸中国妇女。试想,一个国家的妇女为了支持这个国家的侵略 战争竟然连最无耻最下贱的事都愿去做,那么这个国家的人民对这场侵略战争的态度是反对还是拥护,答案不言自喻。

1942年春,中国青 年远征军攻打被日军占领的缅甸公路上的一座大桥。当时守桥日军叫80名慰安妇撤离,但她们说:“我们是为了效忠国家,慰劳士兵才到前线上来,我们要和士兵 坚持到底。”结果她们全部战死。日本的军国主义确实深入“民心”,连慰安妇都深为拥护,为了支持日本的侵略战争不惜牺牲自己的生命。日本人民拥护战争是毫 无疑问了。

多少年中,日本人民不惜送自己的豆蔻年华的女儿去当慰安妇,以支持那场战争,而中国人却主观臆断地认为日本人民是被迫把他 们的女儿送去当慰安妇,这是不符史实的。不错,现在看来,慰安妇是极为不幸的,但当时她们,还有她们的父母兄弟都认为是光荣的。日本慰安妇所遭受的不幸, 正是咎由自取,不值得同情。

二战时,日本政府和日本军队也同样热烈欢迎日本女人来当慰安妇,使日军成了世界近现代史上唯一一支携带军 妓的军队。日本皇军的荒淫糜烂已在世界历史上到了高峰,他们凌辱了成千上万的中国妇女还不感到满足,还要把本国的妇女招募来陪他们睡觉。于是日本慰安妇不 但给自己,而且也给日本政府、军队、人民和民族都带来了深深的耻辱,但是,这只是到后来才被发现的。

当时,军国主义已统治了整个日本,使得一切都要为它服务。为了它,廉耻、道德都可以丢弃,也必须丢弃。于是日本政府、军队、人民和日本女人自身都认为日本女人去当慰安妇是一种义务,也是一种光荣。假如日本人民真的反对战争,我们就无法理解慰安妇这一现象。

日 本人民有没有战争责任呢?我们慢慢看下去吧!当时,在战火快要烧及日本本土时,东京一位年过六旬的老人因两个儿子都在前线“玉碎”,便在街上自焚身亡,死 前一边啕号大哭,一边高呼:“大东亚圣战胜利了!野狗日帝国万岁!”这个老人竟丝毫也不对给他家带来巨大灾难的日本帝国主义表示愤恨,却依然拥护他的国家 的侵略战争,认为失去两个儿子是值得的、光荣的,但另一方面,由于人之常情,他又为两个儿子感到悲痛,更因为对他国家的前途感到极度的失望,所以临死前那 么啕号高呼。他心里说不定还有另一种意图,即妄图用他的死来激励其他日本人,使他们更加奋勇地去战斗,同时还不死心,还希望他的国家取得最后胜利。他此时 的心情可谓矛盾至极。这个老人并不像有的人认为那样是一个不情愿的殉道者,而恰恰相反,是一个情愿的殉道者,要不然,他为何不高呼“打倒日本帝国主义!打 倒天皇!”呢?作为一个快要死的人,是应当有胆量说出这样的话来的。

1945年8月15日,天皇裕仁宣布投降后,东京的居民千百户人 家来到二重桥外,家家户户的老小跪伏在地,面对皇宫,叩头遥拜,痛哭不已。有的人在激愤中剖腹自杀,还有的竟全家老小三辈共同自刎,以死报国。东京青山通 有的全家卧轨自杀。横滨一所小学听到天皇投降诏书后,校长便带领一群小学生集体投海自尽了。他们为什么要这么做呢?因为他们狂热地、坚决地拥 护的侵略战争已失败了,他们绝望了,愤怒了,才做出了这一幕幕其他国家无法比及的事来。但是,对于这些事,中国人却轻描淡写地说那是少数现象,大多数日本 人是欢迎日本投降的。我只能同意这句话的前半句,而不同意后半句。不错,相对来说 ,那些事是少数,但却具有典型意义,那些事正说明了日本是整个民族(包括日本人民)都对日本投降感到绝望和愤怒的。不是这样吗? 难道要日本所有小学的校长和学生都投海自尽了,日本所有的人都自杀了,才能证明日本人民是拥护日本的侵略战 争的吗 ? 日本那些令人惊骇的事很显然是日本人民拥护战争的典型表现,是属于日本整个民族方面的,而不是属于只代表“少数”部分人的那方面的。

我 们再来看看日本军队。说到日本军队,中国人自然都会表示强烈的愤怒。日军在中国烧杀淫掠,无恶不做,他们好斗成性,疯狂野蛮,残忍无情。只要看看这些士兵 (从日本人民中来的人),那么,再要把日本人民说成是善良的、反对战争的,只怕是难于令人信服的。1932年9 月16日中午,200多名日本守备队和宪兵队将平项山村子团团包围,将全村3000多名男女老少逼赶到平顶山下的一块草地上,用六挺机关枪对他们进行了疯 狂的扫射。人群一排排倒下去,一霎时血肉横飞。一阵枪杀之后,那些杀人恶魔唯恐不能斩尽杀绝,又让***用中国话喊:“鬼子走了,跑哇!”倒在血泊中没有 被打死的人闻声一动,机枪又响起来。接着,日军又检查尸堆,发现尚活着的人就用刺刀扎、战刀砍、手枪打。一名日军用刺刀挑开一个孕妇的肚子,扎出 了婴儿,挑在枪尖上取乐。看看日军是何等的野蛮恶毒,居然“检查尸堆”,居然挑开“孕妇的肚子,扎出了婴儿,挑在枪尖上取乐 ”。如果日本人民真的是“善良的”,那么他们的子女在战场上是不会表现如此残忍的。再看南京大屠杀,这场大屠杀夺去了三十万无辜中国人的生命,更为可恨的 是,在这场大屠杀中,每天至少有1000名妇女惨遭强奸、轮奸和奸杀。在这场无耻至极的污行中,连老人和少女也不能逃脱它的魔掌。据南京敌人罪行委员会调 查:“……凡被日军所遇见之妇女同胞,不论为高龄老女或少女幼女,几均不获免……据主持难民区国际人士之粗略统计,当时本市遭受此种凌辱之妇女不下8万之 多,且强奸之后,更施以剖乳、刺腹种种酷刑,必置之死地而后快。”一位当时从南京逃出来的女同胞说:“当敌人初来的时候,只要看见妇女就拉,不管老少,更 不问白天和夜间,因此,上自五六十岁,下至八九岁的女同胞,只要被敌人碰到无一幸免。”1937年12月26日,一个11岁的幼女在金陵大学院内被日军轮 奸致死。目击者说,她的两腿之间肿裂并沾满血污,死后的样子惨极了。另又据一位目击者说,日军对中国妇女:“有时用刺刀将奶子割下来,露出惨白的肋骨;有 时用刺刀戳穿下部,摔在路旁,让她惨痛呼号;有时用木棍、芦管、萝卜塞入下部,横被捣死,日寇则在旁拍手大笑。”(本段事迹均引自《为什么日
本 不认账》)日本人的罪行罄竹难书,本段所引只是其中万一而已。在此,我想问问中国人:“如果日本人民是善良的,为什 么日军又如此残忍野蛮?难道是‘善良的’日本人进部队后被教育成这个样子么?”恐怕不是这样。日本部队恐怕还没有这样 大的能力,在蓦然间就能将如此之多的“善良的”日本人变成一群群恶魔。那么只能是日本人在进部队前(换句话说在民间时)就是一个个恶魔,在进入部队后才会 如此无耻、野蛮、凶残。

正如美国著名女人类学家本尼迪克特在其名著《菊与刀》中所说:“据说征集兵一旦接受了军队教育,往往变成另外 一个人,变成 ‘真正黩武的国家主义者’。但是这种变化并不是因为他们接受了极权主义国家理论的教育,也不是由于被灌输了忠于天皇的思想……在日本家庭生活中,受日本式 教养并对‘自身 ’极其敏感的青年,一旦陷入这种环境,极易变成野蛮……这回就使他们自身变成精于折磨别人的人。”

我们说日本人民是善良的,又有什么说服力昵?



一 个参加过南京大屠杀的日本兵宫本在1937年12月16日写给家人的信中说,“我们得到了中国的首都,也得到了首都的女人;这是个没有出息的民族,五千年 的历史,对他们来说没有什么用;只有建立大东亚共荣圈才有希望。”看到这句话,那些认为“日本人民善良、友好”的中国人是否还得为他辩护,说他只是到部队 后才变成一个蔑视中国,赞扬“ 圣战”的人?

最后,我们来看看日本人民是怎样欢庆胜利的。珍珠港事件后,日本举国上下热烈地进行了庆 祝活动。东京、大阪、横滨、京都和奈良 2002 等地连续三天三夜游行庆祝。人们奔走相告,交相赞颂,全国沉浸在一片欢庆的海洋之中。在皇居二重桥外参拜的人群如山如海,络绎不绝。男人们手举膏药旗高 呼:“天皇陛下万岁!”甚至妇女也身着盛装,前来祝贺,向皇宫深深鞠躬。这是一幅日本人民拥护日本侵略战争的绝好画照。

在二次大战 末,美国有一个人的话很生动地说明了日本人民是拥护日本的侵略战争的。这个人名叫埃德温·莱顿,是一位毕生从事日本人心理学研究的教授。当时,美国要给日 本投放原子弹,但此时的美国海军上将尼米兹却很是疑惑,因为在他看来, 投放原子弹是非常不道德的,但是,如果不投原子弹,又难于使具有浓厚武士道精神和大和民族精神的日本人投降,因而,他便去问埃德温·莱顿教授。这位教授 说:“将军阁下,在当今的日本,只有天皇有权使日本人停止战争,但即使对他来说,停战也不是轻而易举的事。如果他让日本所有的妇女都剪去头发,或者叫国民 们倒立起来,用手走路,他们都将照办不误。甚至 如果他命令所有的男人都割去睾丸,百分之九十九的人都会从命。但是命令军队放下武器,却又是另一回事。”于是,尼米兹 打消了犹豫,决定投原子弹。这位教授的话说明,日本天皇的权威是极大的,但即使他仍难以让日本人投降。可见日本人是拥护战争的。自然,日本人民也是拥护战 争的。(后来的事证明了这位教授的话:裕仁宣布投降前,遭到激烈反对)

二战时逃到美国的德国著名作家艾米尔·路德维希在其著作《德国 人:一个双重历史的国家》中谈及二战时说:“……但是所有这些陈述,都没有涉及德国人民应当负什么罪责。”“但是在国内深入一步追究这场世界大战的罪责, 就会直接指向德国人民。德国人民多年来以默许的态度对待这场罪恶,现在要想说成是无所事事的旁观者,或无辜者,这是徒劳的。”类似地,日本人民也不是“无 所事事的旁观者”,或“无辜者”。日本人民不是默许地,而是积极地拥护并积极地参与了日本对中国和对世界的侵略。而中国人却硬要把日本人民说成是善良的、 反对战争的,并且是无罪的,这只能欺骗那些用屁股思考问题的人。

日本侵略中国的七十余年中所犯下的罪行,磬竹难书。他们割占中国土 地,勒索战争赔款,奴役中国人民,抢劫财产,烧毁房屋;奸淫妇女,上至老妇,下至幼女,无一幸免;割去妇女的乳房,用刺刀插入妇女的阴户,挖出孕妇的胎 儿;刑讯中国革命志士,枪毙无辜;对中国人进行集体活埋,或挖眼,割鼻,活体解剖……无所不用其极,给中国造成无比深重的灾难和耻辱。

对 此,中国人却认为只是一小撮日本的统治阶级的罪责而已。这又怎能令人信服?日本从天皇到平民,从官兵到工农,从良女到军妓,从老人到小孩,从知识分子到文 盲……无一不在支持着日本的侵略战争;在侵略中国的七十余年中,日本工人和农民生产出武器和粮食送给日本军队,并且其自身也成了日本官兵的主要来源,而这 些官兵又是屠杀中国人民的直接执行者,日本人民的战争罪责无可推卸。

四 日本和族是劣等民族

在中国甚至在世界绝大多数人看来,日本和族是个优秀的、伟大的民族,然而在我的眼里,它不过是个劣等民族而已,而且它还是最劣等的民族。为什么呢?

我们知道,日本历史短暂,比中国晚进入文明历史二千余年。

我们也知道,当初,日本并没有文字,后来将中国的汉字搬进去加以改造,此后才有了自己的文字。

日本也没有艺术,后来才从中国引进了美术、泥塑、干漆法和木雕等等艺术。

日本也没有哲学,后来才从中国引进了孔儒哲学,再后来又引进了宋理哲学,当然,还引进了其他哲学。

日本也没有文学,后来学习了中国文学后才有了文学。比如, 《日本书记》便是模仿中国史书编写的国家正史,而五言诗、七言诗则更是模仿中国诗的产物。

日本也没有医学,至公元七世纪才吸收了中国的医学,并在此基础上逐步发展了日本医学。另外,日本的水稻、铁器和冶炼技术也是在公元前二、三世纪的弥生文化时代从中国传入的。日本的科学,几乎全是来自中国。

日本也没有教育,后来才模仿唐制,设立了专门的教育机构,并规定明经科学生必读《周易》、《毛诗》、《周礼》、《论语》等等;算道科学生必修《孙子》、《九章》、《周髀》等等;明法科主要学习隋唐律令;纪传科必学《史记》、《汉书》、《后汉书》等等。

日本也没有政治制度,至七世纪下叶,天武天皇才模仿唐朝的政治而建立了其政治制度。等等

以上所说的一切我都不想进行繁琐冗长的论证。

总之,日本和族从头到脚,每一个地方都是中国塑造的。但我们不要以为日本和族和我们是同一民族。难道不是这样吗?

日本人民没有什么革命传统。在日本历史上,没有发生过任何轰轰烈烈?

日 本从诞生起,其文学、哲学和艺术在世界历史上便几乎没有地位,在这三方面也找不到闻名世界的文学家、哲学家和艺术家。只有它的科学,似乎在世界上尚有地 位。但我们只要稍微分析一下,就会发现日本古代科技很是落后,而近现代以来,日本虽然科技先进,但从不曾有过伟大的发明和发现,也从不曾有过伟大的科学 家。日本不过是善于利用并改进别人已经发明和发现的东西而已。所以日本在近现代以来科学虽然是先进的,但并不是伟大的。这也是大部分中国人的共认。

日本在民族道德上更不足以称道。众所周知,日本战后至今没有正式认罪,相反,百般抵赖。这连中国人认为日本人民善良、无罪的中国人都感到极为气愤。

1952 年至1975年间 ,裕仁共参拜了靖国神社七次,他说:“我知道参拜靖国神社会引起批评,但英烈们是在我的名义下为祖国献身的,我怎能不来祭奠?”1971年9 月18 日至10月13日,裕仁携皇后良子访问丹麦、比利时、法国、英国、荷兰、瑞士和联邦德国七国,归国时顺访美国,但在访问时,他并没有讲对战争道歉的话,因 而在有的地方被称作“希特勒”,要他滚回去;他种下的纪念树在第二天便被砍倒,树根上被倒了浓盐酸。

日本的靖国神社至今仍供奉着明治 维新后至二战时为止的日本在国内战争和对外战争时死去的250 万官兵的灵牌,其中包括被远东国际军事法庭判处绞刑的东条英机等14名甲级战犯的牌位,并被作为“为国殉难者”予以祭祀。日本借口尊重国民感情,选定8月 15 日作为首相和其他成员参拜靖国神社日(如果他们尊重国民感情没有尊重错的话,那么说明日本国民也不承认那战争是侵略战争)。1975年8月15日,正值日 本投降30周年纪念日,三木首相以个人“名义”参拜了靖国神社。自那后,日本历届首相(池田勇人除外)都在靖国神社春秋两次大祭时以“个人”名义前往参 拜。80年代后日本政府首相加上几乎所有内阁成员都在8月15日“终战纪念日”这天参拜。1985年8月15日,中曾根康弘首相在出席政府召开的“全国战 没者追悼会”后竟带领全体成员“正式”参拜了靖国神社。更让人愤怒的是,1996年日本通过了一项法律,明文规定今后各国国家元首访问日本时,必须去参拜 靖国神社。那么,今后我国的国家元首去日本时,也得这么做了?

在此我想说句题外话,本文若以后得以发表,那么本节中每年都得增加最新的有关日本否认罪行等等方面的内容,才不致使本节内容显得陈旧落后,当然本节内容同时也得进行精减。

1988 年2月,当时的日本首相竹下登说:“上次战争是否是侵略战争,应当由后世历史学家做评价。”1994年5月,法务大臣永野茂门说“南京大屠杀是捏造出来 的”。当时的日本首相羽田孜竟还说他是“一个正直而又稳重的人”。实际上,否认南京大屠杀的不只一个永野茂门,还有其他许多人。

1995 年6月7 日,日本通过了一项有关战后50周年的“国会决议”,从中不但无法看到日本对过去的历史存在任何忏悔或道歉之意,反而在各方面都比过去倒退了一步。该决议 将日本对亚洲的侵略与统治行为淡化为 “世界现代史上殖民统治和侵略的种种行为” 潮流之一,暗示日本只不过是身不由己,被卷入旋涡中。

日 本不但不为其侵略罪行道歉,相反,却为其侵略罪行颂功,胡说什么它侵略亚洲国家是为了建立“大东亚共荣圈”,是为了把中国和其他亚洲国家从欧美殖民者手下 解放出来。这是彻头彻尾的谎言。谁都知道,当时日本已经步入了帝国主义阶段,到 达了最反动最野蛮的阶段。日本当时也攻打美英等国,仅仅是出于其争霸的目的,是为了独吞中国和亚洲,哪里是为了要解放中国和亚洲。



日 本每年都要举行纪念广岛长崎遭受原子弹轰炸灾难的活动,他们这么做,无疑会激起对美国的仇恨,减轻自己侵略他国而产生的负罪感。日本人便是这样,谈起原子 弹灾难时便滔滔不绝,而谈起日本侵略中国时却躲躲闪闪。有的日本人居然不知道日本侵略过中国。有的日本人甚至把原子弹灾难与德国屠杀犹太人的罪行相提并 论。这个优秀的、伟大的民族的聪明睿智的大脑竟丝毫也没想到,当时美国给它吃原子弹是为了敦促它尽早投降,以免它真的“一亿玉碎”了,同时,又是对它的惩 罚,是正义行为。日本人妄图借原子弹灾难把自己打扮成一个受害者,其实,当时就是美国把整个和族都炸了,也是它罪有应得,做得毫不过份。

不 错,二战时,日本人民也受了害,但这与日本侵略中国和亚洲这一事实并不抵触。然而日本人是不理会这点的,他们只看到了自己的血,而没有看到别人的血。在太 平洋战争中,日本死了不少人,虽然是日本偷袭珍珠港,打死了不少美国人,发动了这场战争,但日本人根本不管这些,太平洋战争的日本战死者的数百万家属便反 对太平洋战争是侵略战争的结论。

日本不认罪的事情,罄竹难书。应当说,日本如此不认罪,是整个日本民族不认罪,而不仅仅是日本政界人士不认罪,更不仅仅是日本极右派分子不认罪;不认罪的还包括日本人民。

有人说,良心上的不安永远也摆脱不掉。可是日本人丝毫也没有什么良心上的不安:他们已卑鄙到极点了。但我必须正告日本人,中国是个伟大的国家,不需要你们承认自己有罪,但中国将以铁和血来证明,日本是有罪的。

与 日本人相比,德国人认罪态度却很好。德国人说:“千年易过,德国的罪孽难消。 ”“我们德国人承认我们的耻辱。”联邦德国和统一后的德国历届政府最高领导人一直都承认德国的罪责。1970年,联邦德国总理勃兰特甚至在华沙犹太人殉难 者纪念碑前下跪忏悔。德国政府还一直积极协助以色列情报组织摩刹德追杀漏网的纳粹分子,在经济上又慷慨地给受害民族以赔款。而日本却让甲级战犯岸信介在战 后当上首相,至于经济上,倒是早早地给了战后被关押过的战犯以补偿,却拒绝给中国和其他国家以赔款,这几年闹得沸沸扬扬的慰安妇索赔事件也没使日本赔一分 钱。

韩国《中央日报》1995年11月11日一篇名为《日本为何始终不反悔》的文章说:“日本只对强者低头,只有我们变得强大的时 候,日本才能够作出真正的反省。”所以现在要使“优秀的”日本民族认罪,实在难呐!可以看出,日本在明治维新前,是一个历史短暂,落后野蛮,对人类毫无贡 献的国家,因而当时的和族称不上是优秀的、伟大的民族。而在明治维新后至二战时,虽然它一直强大,但由于长期侵略他国,作恶多端,很显然更称不上是优秀 的、伟大的民族。雨果说过:“衡量伟大的唯一尺度是他的精神发展和道德水平”,而不是其他什么。强大与否和伟大与否毫无关系。这是小孩也知道的道理。

不错,那时的日本是强大的,但野蛮、凶恶,所以它不能称为是优秀的、伟大的民族。假如它称得上是优秀的、伟大的,那么,毫无疑问,大杀人犯、大强盗、奸相、阴谋家和卖国贼等人也都可以称为优秀的、伟大的人了?

二 战后,日本虽迅速崛起,成了世界强国,但由于它顽固地否认罪行,仍然暴露出其丑恶思想,因而这时的和族仍称不上是优秀的、伟大的民族。一个优秀的、伟大的 民族,应当是一个勇于承认过错的民族。正如一个优秀的、伟大的人,应当是一个勇于承认过错的人。世界上从来不会把一个犯下滔天罪行而又不认罪的人看作伟 人,也不会把一个这样的民族称做伟大的民族。

纵然日本战后诚恳地认了罪,似乎还不能称作优秀的、伟大的民族。因为评价一个民族时,要 看其全部,而不能看片断。日本在1945年后,即使是伟大的吧!但在1945年以前,无论从哪方面讲,它都不是优秀的、伟大的,相反,是劣等的。日本处于 劣等的时间远比处于优秀的时间长,所以日本仍是劣等民族。

假如把日本比作一个人的话,那么,这个人在一到九十四岁之间活得平平常常,窝窝囊囊,在九十四岁到九十八岁之间却做尽坏事,在九十八到一百岁之间却又不认罪,那么,这样的人谁会把他当作伟人呢?同样,这样一个民族谁会把它当作优秀的、伟大的民族呢?

日 本现在虽然没有侵略他国,实际上它依然是个“恶国”。恶国并不要每时每刻都要行恶而从不停止。正如一个恶人并不要每时每刻都杀人而从不停止。实际上,他一 生中只要杀过一次人,就永远是恶人。谁也不能说,这个恶人一生中绝大部分时间里都没杀人,只有几分钟的时间里杀了人,因而他不是恶人。人对善对恶的要求是 不同的。日本虽在人类的历史长河中只有一瞬间侵略过他国,屠杀过他国人民,但它将永远是恶国。

优秀的、伟大的民族,人们总是希望其越 多越好,但是我想,像日本这样的“优秀的、伟大的”民族,要是有一百个,那么在二次大战时人类早已成了地下的累累白骨了。所以像日本这样的民族还是越少越 好。像日本这样的民族,要么太弱小,无力去欺凌其他民族,要么足够强大,便老想着去欺凌其他民族,只要一有机会,就会付诸现实。正如1995年8月17日 韩国《东亚日报》文章《日本的本质没变》上说:“日本这个国家认为它只要有了力量,就理所当然地要侵犯别人,因此可以肯定的一点就是无论现在还是将来日本 都将以力量为基础来对待我们。”所以像日本这样的国家,最好是不要让它强大,否则人类终究有一天要遭殃。日本,这个曾被中国称为“倭国”“倭奴国”的国 家,有何资格称为“优秀的、伟大的”民族?纵观它的历史,不过都是恶魔,专门屠杀善良;又都是牲畜,专门污辱妇女;又都是强盗,专门 抢劫财产;又都是小人,专门忘恩负义;又都是无赖,专门否认罪行。恬不知耻的日本人,昂起他们的脸来,得意洋洋地说:“我们的民族是个优秀的、伟大的民 族!”而愚蠢的世界人民竟半蹲着、仰视着日本人说:“是的,是的!”而中国人竟跪在地上,仰视着日本人,说: “是的,是的!”这是多么的令人痛心。

一九九六年,当倭奴国石原慎太郎正在蔑称中国人为……人时,中国人还在宣扬倭族是优秀民族,并且表现得顽冥不化,那么我们就不得不承认,石原慎太郎的说法是多么的正确。

也 许有人会说,民族没有优劣之分,各民族都创造独自的光辉灿烂的文化,都为人类做出了贡献。这是在中国广为流传的看法。但是,这种论调只是出自善心,而不是 出自事实。作为事实是,民族有优劣之分,正如人有优劣之分。人,有救人者,有杀人犯;有民族英雄,有卖国贼;有高尚者,有卑鄙者……而民族,有的文明,有 的野蛮;有的知足,有的贪婪;有的善良,有的凶恶;有的先进,有的落后;有的历史悠久,有的历史短暂;有的创造出辉煌的文化,为人类做出巨大的贡献,而有 的却在文化上没有什么突出成就;有的为人类造福,而有的却给人类带来灾难……这便是民族的优劣之分。我们把世界的民族放在一块比一比,总能分出优劣来的。 谁说民族没有优劣之分呢?

像日本这样的民族,本来是可很容易地发现它是一个劣等民族的,但又为什么世人普遍认为它是一个优秀的、伟大的民族呢?

这 主要是因为人有一种劣根性,即崇尚“力”。一个人要是奴役着别人,那么,人们往往夸赞并羡慕前者,虽然他是该否定的;而鄙视后者,觉得他没用,窝囊,虽然 他本该得到同情。在这个卑劣的、弱肉强食的世界上,杀一个人会被当做罪犯,而杀一万个人会被当做英雄,杀一万万个人会被当做神。总之,杀人越多,便越受敬 畏,崇拜。穷凶极恶的希特勒,在中国都不知有多少崇拜者。1872年至1945年间日本侵略中国,显示了它的“力”,那么,即使它的所做所为是最无耻最罪 恶的,人们也依然崇拜它,把它当做优秀的、伟大的民族。谁还会真正用道德标准去衡量它的优劣呢?

假如日本在明治维新后到现在仅仅是经 济和科技发达,而从没侵略过其他国家,那么它的“名声”是不会有现在这么响的,更不会被人说成是优秀的、伟大的民族。日本的“ 名声”是建立在数千万中国人和亚洲人的尸体上的。附带说一下德国,假如它也仅仅是经济和科技发达,而没有发动两次世界大战,那么它的“名声”也是不会这么 响的。

人便是这样,一方面反对侵略别的国家,另一方面又崇拜侵略者,同时恨不得自己也去侵略别的国家,称霸全球。

日 本人倒好,先前曾在中国的土地上快意地杀戮,抢劫,作乐,投降后却受到各国的钦佩与敬畏,又不要背历史负担,又不要为其罪行感到羞愧。而中国遭受侵略,饱 尝痛苦,蒙受奇耻大辱,在以后的年代里,一代又一代的中国人还要背着这一沉重的历史包袱,心中常常要受着痛苦的焦熬,总而言之,自从中国遭受侵略后,无论 什么时代的中国人就不再有完全的欢忻,而常常要品尝遗传下来的痛苦。为什么不复仇,把这一历史包袱甩掉?须知,复仇是雪耻的最好办法,也是唯一的办法。我 们只有复仇,才能甩掉我们的历史包袱,而且还能最快地甩掉我们的历史包袱。用其他方法是做不到这点的,也就是说用其他方法是洗不掉中国人心中的耻辱的。

日本侵略过中国,但时不时地要否认其罪行,而每当这时,中国就要全民族地声讨一次,这好像日本在中国心窝上捅了一刀子,后来中国心脏上的 伤虽然好了,但留下了伤疤。日本从此后时不时地要念一下咒语,而每念一次时,中国就要全身剧痛起来,然后是大声怒斥日本。中国现在的喜怒哀乐居然还要掌握 在别人手上,真是滑天下之大稽。为什么我们不复仇,消灭那个念咒者?

也许,作为私人的仇恨,一个人应当忘却,并且不使它传给后代。一 个人受了侮辱,他死后,这侮辱就随之死了,他的后代是不会有耻辱感的,因而后代之间实在没有必要为父辈和祖辈之间的仇恨而撕杀。但国家与个人不同,因为一 个国家受辱后,其民族尊严受到严重的伤害,这是最重要的;二则,一个国家受辱后,受辱的就不是一个人,而是亿万人民,这种耻辱比起一个人的耻辱不知要大多 少了;三则,一个国家受辱后,她的耻辱会遗传给后代,而且一直传下去,这样,国家和人民就永远会有耻辱感:因而作为国家的仇恨,是不能忘却的,实际上也忘 却不了,这个国家无论什么时代的人都要为祖国复仇,洗掉心中的耻辱。

当然,我如此鼓吹复仇,并不意味着我主张一报还一报,一点小仇都要报,我只是说,在一个国家受了奇耻大辱后,就必须报仇,如果在这种情况下还不报仇,那么这个国家的人还是不是人,还有没有人的感情和需求?中国蒙受了奇耻大辱,就必须复仇,这是正当的和正义的。

我 也爱好和平,但是我不会为和平而和平,即不会为了和平而牺牲一切。如果此时的和平不可取,那么我就主张我们不要这种和平。不错,和平是世界发展的潮流,但 是这只是就宏观而言,在微观上,就不尽是这样。黄河由西往东浩浩荡荡奔流几千里,这是一种潮流,一个方向,但这只是宏观现象;在黄河的许多地方,都有曲折 弯蜒甚至由东往西之处,这又是它的微观之处。

当然,中国可以复仇,也可以不复仇,这完全取决于中国人自己。中国复仇,是正当的、正义 的,但中国不复仇,别人也没办法,而不复仇也并不意味着中国做对了。这正如一个人,他的父母被人杀了,他可以饶恕仇人,也可以不饶恕仇人,这完全取决于 他。他杀掉仇人,是对的;他饶恕仇人,是错的,但别人对此无法;甚至他拜仇人作干爹,别人还无法。

中国是不幸的,遭受了世界上最深的伤害,蒙受了世界上最大的耻辱,但中国不争气,就是不想复仇。对此,我们又能做些什么呢?

中华民族是个自虐型的民族,中国人对自己人百倍的残忍,而对别人则百倍的仁慈。

中 国人对同胞是冷漠的、厌恶的、凶残的,而对外国人却是热心的、喜欢的、敬畏的。在抗日战争中,中国人对日本俘虏优待备至,把他们像老爷似的供养起来,宁愿 自己吃少点、吃差点,也尽量让日本俘虏吃多点,吃好点;日军撤退后,中国人民无微不至地抚养日本人留下的孩子,用中国人自己的话说:“孩子是无辜的。”但 是,我们太迷信“无辜的”这个词了,把它抬得太高了。我们这么做,完全扭曲了自己的人性。当狼咬死我们的孩子时,我们却不能打死尚在吃奶的狼崽,甚至还得 将它抚养大。──这是中国人的看法。中国人真的又把“无辜的”这个词抬得太高了么?不尽然。中国人想来不会忘记文化大革命吧!在那场所谓的革命中,中国人 对那些所谓“地富反坏右”的子女又何其残忍无情啊!他们被迫与他们的父母“划清界限”,被逼离出校门,被剥夺政治权力,被关被打…… 遭受各种非人的待遇。因为按照中国人的说法,“老子英雄儿好汉,老子反动儿混蛋 ”;爱屋及乌,恨屋也及乌。实际上,中国的传统倒是:子女要为父母的罪孽负责,父母不好子女也不好。但是,这种观点只适合于来对付自己的同胞,对待异族 人,却完全不是这样。中国人会自然而然地、不加思索地、毫不留情地迫害本国“恶人”的后代,而对异族人,那怕你摆出一万条理由,他们也决不会去惩罚人家的 后代,所以中国人会如此信奉 “日本人的后代是无辜的,我们不能去复仇”这条谬论。

在抗美援朝战争中和自卫反越战争中,中国人会无微 不至地关怀美国俘虏和越南俘虏,给他们以教育,给他们吃好的穿好的,给他们发工资,给他们以娱乐场所,让他们跳舞,玩耍。相反,抗美援朝时被美俘虏的中国 士兵虽然在狱中表现英勇,可在回国后却倍受刁难与歧视,并遭到无情的政治迫害,连民间人士也对他们如此。十年动乱中,无数所谓 “牛鬼蛇神”惨造迫害,有的被活活折磨而死,有的被迫自杀。害人的人并不一定是“四人帮”或他们的党羽,而包括普通群众。更有可怕的是,亲人相残,而且表 现得忠心赤胆,并没怀有一丝野心,也没有流露出一丝不忍。中国人在文化大革命中用尽酷刑拷打自己的同胞,但是所有那些酷刑从没有施之于日本人,哪怕是罪行 累累的日本人。所有这些,都表明了中国犯了自虐病,对自己人残忍,对别人仁慈。中国会花费无数人力物力去把一个罪恶的外国人改造成一个善人,同样又会花费 无数的人力物力去把一个善良的中国人打成“恶人”。中国人会把自己身上的肉割下来给那些酒足饭饱的外国人做佳肴,而不愿丢一碗饭给一个饥饿待毙的同胞。中 国男人,要是外国人割去他的睾丸,他也不过是对着人家象流着口涎的傻瓜一样嘿嘿一笑而已,而要是哪个中国人瞪了他一眼,他一定会把人家的眼睛挖掉。也许有 人会把这些现象解释为别有原因,但是,我要说的是,所有他们讲的原因都不过是一种表象,还远没有接触到问题的实质与核心,文化大革命之所以能产生,其根本 原因是中华民族存在深深的自虐症,或者说,中国人根本不爱同胞,不珍惜同胞的生命、权力。

试问,如果没有那样的中华民族的性格,又怎 能发动起那么浩大持久的“文化大革命 ”?单靠几个有野心的政治家是无法掀起那么大的风浪的。所以说,“文化大革命”不仅是中华民族的一场灾难,更是中华民族的一场耻辱。在那场耻辱和灾难中, 中国人的一切人性中的劣根性表露无遗。

这些年来有些明智的中国人认为中国之所以落后,一个原因就是因为中国的“内耗” 太多,这是很新颖也很有见地的见解,这种观点实际上说明了中国人存在着自虐的心理,以致中国内乱无穷。中国人对自己的同胞残忍无情,寸利必争,绝不宽容, 让步,而对异族人,中国人却表现得惊人的宽容,大度。我先前总不清楚,为什么中国人时善时恶,好像很矛盾,但后来懂得了,中国人是对外国人善,对同胞恶。 外国人好像很讲人道,其实他们是对本国人讲人道,而对别国人讲兽道。

中国被欺凌被蹂躏达一百年,可是我们来看看中国人对此的反应吧!某中国人说,中国要发达,就必须做三百年殖民地。

某日,几个中国青年在看《南京大屠杀》时,囔道:“怎么不多演演‘密席密西’女人的情景?”

某年,有人主张将《南京大屠杀》改名为《南京1937》

某些中国人说,中国往往杀了几个日本士兵,结果人家报复,反而杀了我们一村的人。

某地,出现这样的照相馆:里面设置了旧日本军服和军刀,去照相的人化装成日本军官留影。

某地,出现了名为“共荣花园”的花园。

多年前,我在上初中,亲眼目睹一个老师对我们振振有词地说:“其实要是我们也侵略人家,也是一样的。”

最令一个国家悲哀的恐怕不在于遭受侵略,而在于她遭受侵略后,自己的儿女却还讥笑她,攻击她,污辱她。这其实又很正常。人都相信强权,公理是不顾的。“落后就要挨打”,好像不打就不对,打却是义务。中国遭受列强侵略,挨骂最多的不是那些列强,而是中国自己。

《读者》1994年第8期上一篇文章《荒丘》讲了这么一个故事:

日 本侵华时,有一个村把九个日本士兵打死,后来日军进行血腥报复,将这全村的人都杀了,然后将他们埋入一座大坟,又把那些日本士兵的尸体埋在那座大坟上。数 十年过去了,那座小坟一直压在大坟上,谁也没动它。中国改革开放后,一个日本人来到中国,找到那座坟,花钱请中国人修那座小坟。中国人竟照办了。那些压在 日本人下的中国冤魂,在九泉之下恐怕要表示强烈的抗议了。

我们来看看日本吧!1971年12月12日,日本的“东亚反日武装战线”炸 毁了北海的兴亚观音像和殉国七士墓碑,1972年4月6日又炸毁了横滨的总持常照殿,1972年10月23日又炸毁了札幌的北大北方资料室和旭门的“风雪 群像”。在这方面,中华民族居然连一个倭族都不如。

中国有过世界上最反动最无耻的大卖国贼,和世界上数量最大的“***”,这些人给中华民族带来了无穷灾难,这些人带来的灾难比其他任何国家的卖国贼给他们国家带来的灾难都要大得多。这是中华民族的悲哀。

中 国人爱国意识是很淡薄的。百年之辱使得中国人产生了浓厚的自卑心理,因而中国人不大喜欢自己的国家,而向往外国。中国人会自豪地说:“你中国要是没有美国 放原子弹炸日本,打得赢日本么?”“你中国被日本打成那个样子!”“你中国多穷!”“美国那么发达,你中国打得赢么?”……这个“你”字加得最好,好像他 不是中国人,而是外国人。中国人便是这样,你要是指出了中国的缺点,他会兴灾乐祸,而不会思图改变中国这一缺点,甚至他自己都会不思进取,甘于堕落。也许 有人会反驳我的观点,并举出建国初有许多科学家、艺术家等人不顾艰难险阻回到祖国的事例作为反面论证。可是,这些人都是少数,而且是特殊人所为,而我说的 却是多数,且是普通人所为,因而更具代表性。

中国人恭顺、怯懦、软弱、柔和、仁慈、愚善、自卑,缺少冒进、强悍、粗野的性格,要让这 样的人复仇,实在难呐!1949年以来,中国没出现过一篇宣传复仇的文章,这是一个奇迹。只是这奇迹是一种悲哀。纵然复仇是非正义的,甚至是反动的,但由 于中国蒙受了莫大的耻辱,中国也应出现一篇宣传复仇的文章,这才是正常的。可是这种文章始终没有出现。中国已到了不正常的顶峰。要是其他国家也蒙受了中国 这么大的耻辱,那么它们的宣传复仇的文章必会如雨后春笋般暴出。

朝鲜,一个远比中国弱小的国家,都敢在教科书上把日本当做敌人,而中国却还在津津乐道地谈中日两国几千年的交流和友谊。“敌人”这个词应当从中国的词典里抠掉,因为这个词对中国来说是用不上的,在词典里简直是白占位置:“复仇”这个词也应当从中国的词典里抠掉。

中 国有一万个人反对复仇,而没有一个人支持复仇;中国会找出一万条理由来反对复仇,而不会找出一条理由支持复仇;中国有人在反对复仇上想方设法,不遗余力, 而没人想方设法,不遗余力地鼓吹复仇。这是中国的悲哀,也是中国的耻辱。在本文第六节所列举的八条反复仇理由,其中任何一条都足以让中国遭受日本无数次侵 略而都不能复仇。为什么是这样,读者只要做番反证就不难推理出来,其中有几条我已经做了反证,其它的几条我就不想再罗嗦了,让读者自己去思考思考吧!

谁 能想到呢,中国人所说的反复仇的理由,其实都是肤浅到极点的理论,而就是这种肤浅到极点的理论,却能赢得十亿中国人深深的拥护。在中国,再没有任何其它一 种思想能像反复仇思想这样得到如此之多的人的拥护了。中国人反复仇思想已成了一种信仰,哪怕你给他们的理论以毁灭性的打击,他们也依然如故地反对复仇。

这是个顽固反对复仇的国家,谁要是在这个国家鼓吹复仇,那么连坟墓中的死人都会拱出来大声抗议。要是中国人有朝一日被日本灭绝了,有谁去问死掉的中国人愿不愿复仇,他们都会摇头说道,日本人民是无罪的,日本后代是无辜的。

这 是中华民族的悲哀。这个民族能容忍异族加在自己头上的一切,复仇是她所极力排斥的。(我知道本文对中国人进行了过份的攻击,这也令我感到悲哀,但是面对如 此惨淡的局面,我又不能不如此,一切理智在这里是无用的。在中国,谁想要改造本民族的灵魂,似乎都不得不攻击自己的国家、同胞。五四运动之后,多少人都著 书立说,对自己深深爱眷的中国进行了无情的、甚至是情绪化的攻击。

我的做法也与此类似,我简直不能控制自己。唉,我用什么来表达对中国人的恨呢?又用什么来表达对中国人的爱呢?我希望我国的读者不会因为我说了一些过份的话而感情用事,武断地否决本文中的观点,即希望本文的缺点不会影响它的一些正确的观点)

本 来,复仇是很正常的事,在一个正常的民族,复仇的言论不会遭到多大的反对,一个人只要略略说几句复仇的话,甚至不用说得很有说服力和煽动力,就会引起无数 的呼应;甚至不用别人宣传,他自己就会产生复仇的思想;第一次世界大战后,德国人心中满怀仇恨,德国的社会上充斥着形式各样的宣传复仇的小册子,这也是后 来纳粹党得以上台的心理基础;而在中国,谁要是鼓吹复仇,纵然他说得很有道理,也会遭到无数人的反对。要使中国人接受复仇主义真是难于上青天。

那些顽固反对复仇的中国人,看起来思想修养已达至高境界,是个高尚者,其实都很平庸:他们是平庸的高尚者。他们是中国的耻辱,而且是中华民族灵魂的下毒者。

一 九九五年,时值纪念抗日战争和世界反法西斯战争胜利五十周年之际,中国方面发表了许多文章,有的揭露日本侵华罪行,有的谴责日本否认罪行,有的怒斥日本美 化侵略,但所有这些文章我都不愿看,因为它们太消极了,太暗淡了,太悲惨了,看了只会让人悲哀,气愤,伤心伤脾,总而言之,除了给中国人一种精神折磨外, 别无他益。这些文章是属于保守的、退缩的、让人只知回忆的东西。

我希望看到鼓吹复仇的文章,因为它们才会使人开朗,振作,给人以希 望,指示人未来,但我的希望落空了,最后什么也没看到。可怕的是,中国年年推陈出新,把那段悲惨史一遍遍地讲给自己人听,在中国人的心灵上进行长期的狂轰 滥炸,到最后也许只能麻木中国人的灵魂,将其变成一个个死灵魂。因为看多了悲惨史,谁都会渐渐地麻木。不幸,这一点已露出了一些迹象 来了。当小孩子在电影上、书籍上看到那段悲惨史时,百分之九十九的人都会产生强烈的复仇念头,但长大后这种念头就日渐消失,到最后甚至还成了一个顽冥不化 的反复仇者。这是何等的让人心痛!多年来,中国在大力宣传爱国教育,但是那些爱国教育不过是让自己多看看怎么挨人打,多看看自己的女同胞怎么让人蹂躏而 已。如《火烧圆明园》、《鸦片战争》和《南京大屠杀》等等,让人不忍卒看。而在看这种片子时,每一中国观众身旁都站着一个“博爱而宽容”的中国人,一旦中 国观众燃烧
起复仇的火焰,这个“博爱而宽容”的中国人就会赶紧去提来一桶冷水,把他心中的火焰浇灭,并且教训他几句:“我们不能复仇,因 为……”于是中国观众一时又没有复仇的火焰,继续观看这爱国片,后来又燃烧起了复仇的火焰,这个“博爱而宽容”的中国人又赶紧去提来一桶冷水,把他的火焰 浇灭……如此循环不已。

这里,中国用一种最残忍的手段把中国人的天性最大限度地激起来,让中国人心中的复仇的火焰泼辣辣地燃烧,足可 以毁灭整个人类,而又用一种最残忍的手段把这一天性压制下去,使中国人从心底认为自己刚才的想法是最罪恶最野蛮的,是完全应当否定的。在这种不停地奔走于 两个极点的情况下,中国人的心灵就完全扭曲了。事实也正是如此。

在中国人眼里,复仇是个反动的概念。本文若得发表,我想信,百分之九十九的中国人看了后都会说:“这是一篇反动的文章!”这点我敢拿我对民族复仇主义的忠诚来打赌。可见,现在的中国人已经愚昧到何等程度。

中 国是个唐僧式的国家,唐僧的性格即是中华民族的性格。唐僧便是这样,昏聩懵懂,不分是非,懦弱无能,战战兢兢,诚惶诚恐,百无一用;明知是杀人的盗,他也 要饶恕;明知是吃人的妖,他也要放掉;他一次又一次地遇妖,一次又一次地吃妖的苦头,却一次又一次地予以饶恕;孙悟空要除恶诛凶,他要阻挠,甚至念紧箍 咒;他心中只有“不许杀生”,只知讲仁行善,而没看到别的东西。唐僧这么做,却还能得到回报,他成了佛;而中国却成不了佛.

为我们的民族性格而惆怅慨叹的人们.

2006-12-20

【转贴】让VMware支持安装OEM版的系统


VMware新闻主题有 人问怎么让 VMware 支持安装OEM版的系统,这个也一直是我想知道的.搜索了相关的资料,没发现有这一类资料.但是我想总体的思路是一样的.经过测试成功.环境是主机是联想 OEM XP SP2 HOME,客户机是联系OEM XP PRO,VMware Workstation V5.5.3 Build 34685.含图和详细步骤

要安装OEM版的系统当然就是改BIOS了,自己的机器不敢动手就先搞个虚拟机开刀。VMware用的是Phoenix BIOS。那修改BIOS的工具就当然是Phoenix BIOS Editor了。没有就去这里下载

首先就是用一款二进制编辑器把BIOS的ROM导出来。我们用的最多的就是UltraEdit了。关键之处!我们在VMware的安装文件夹下面的Bin 文件夹(X:/Program Files/VMware/VMware Workstationin)下vmware-vmx.exe文件里面,查找字段EA 66 E7 00 F0 00 00 00, 这个在文件里就只有一处。然后从这个00(包括00)往上选定512K就是524288个字节,这些信息在UltraEdit的状态栏里都能看到。利用 UltraEdit的保存选区为功能保存到一个后缀为ROM的文件。!!注意:刚才选中的不要释放掉,一是再拖动一次太浪费时间,二是在后面容易出错。



然后我们用Phoenix BIOS Editor打开刚才的ROM文件,修改BIOS。打开后找到DMI Strings这个窗口修改里面的信息。主要是在“Motherboard Version”栏里面改为对应的OEM信息,可以修改的还有“MManufacturer Name”和“System Manufacturer Name”。



下面是一些品牌的信息:

LEGEND: 在BIOS任意地方加入"LEGEND Dragon"字符串,注意大小写。
清华同方: 在BIOS任意地方加入"TSINGHUA TONGFANG COMPUTER"字符串,大小写无所谓。
TCL: 在BIOS任意地方加入"TCL123"字符串。
七喜: 在BIOS任意地方加入"HEDYCOMPUTER"字符串。
COMPAQ: 在BIOS中加入"COMPAQ"字符串
HP: 在BIOS中加入"Hewlett-Packard"。
ACER: 在BIOS任意地方加入"AcerSystem"字符串,注意大小写。
IBM:在BIOS任意地方加入"IBM CORPORATION"字符串,不分大小写。
方正: 在BIOS任意地方加入"Founder PC"字符串,注意大小写。

修改完毕后依次选择“File→Build BIOS”,出现第一个提示,选择否,第2个选择是,然后换个名字,把原来的冲掉,然后保存退出。


再返回刚才的UltraEdit窗口,刚才的不是没关掉并且没有释放选中的内容吗。那就首先使用“编辑→剪切”命令删除刚才选定的部分,注意光标的切入点不能变。然后执行“文件→特殊功能→插入文件”命令插入修改后的BIOS文件,存盘退出。

OK了!现在我们就可以安装自己的OEM系统了。(做这些操作前注意各个文件的备份)

2006-12-14

真实生活的镜头-别有滋味在其中~! - -

用感恩的心对待生活,日子不再黑白:
成都文殊院里的旅游者在拍照留念
这看了像是我老妈那个年代的事情,,,记得看过老妈小时候的照片好像差不多都是这样~!


一对农村青年的传统婚礼
呵,现在的婚礼还会是这样简朴吗?又是婚纱,又是酒店,还有结婚照片。

夏夜里陪孩子读书的母亲
看到这张就想起上小学时,有一次晚上好晚作业还没有做完,我就埋头在台灯下写作业,老爸在旁边给我嗑瓜子。。

路边的市民扑克牌娱乐
经常在楼下小院里看到小院里的老爷爷老奶奶在一起打麻将!

在胡同里边走边转呼拉圈的女孩
想起我小时候,院子里的孩子都一起玩,一起疯!

随时补妆的游人

小理发店开在只剩下一面墙的拆迁房里
这个,,,,看右边的小车,,,,明显的对比

一个偷自行车的人被绑在树上挂牌示众
现在没什么偷自行车的了,都改偷小车啦!


时代不同了
感觉还相同吗???

我的blog守则十八条

1、blog没有工作重要
2、blog是种乐趣,但不是唯一的乐趣
3、无病呻吟不要紧,但不要虚伪
4、人云亦云的附和并不是什么可耻的事,只要认为别人说得对
5、不怕说错,就怕不说,错了就改,改了再说
6、不要太刻薄,实在忍不住就警告自己下不为例
7、原创,尽量不转贴或大段复制
8、尽量不要写太长的文字
9、想写才写,不要背上周期性更新的包袱,因为我不是专业的blogger
10、尽量不要写可能会给别人带来麻烦的东西,实在忍不住可以隐晦一点
11、尽量订阅每一位在自己的blog上出现的blog
12、链接、trackbacks和rss订阅才是联络的纽带,比友情链接更重要
13、除了广告,不要删除任何回复
14、访问量是鼓励不是目的
15、多关注blog技术之外的内容
16、生活琐事可以写,但不要太多
17、关注但不谈论keso,keso刚刚讨论过的话题也尽量不参与
18、以上守则必要时可以不遵守,什么时候算“必要”由自己的心情决定

愈食愈瘦的15種食物

1.紫菜 除了含有豐富的維他命A、B1及B2,最重要的就是它蘊含豐富纖維素及礦物質,可以幫助排走身體內之廢物及積聚的水分,從而收瘦腿之效。



2.芝麻 它的「亞麻仁油酸」可以去除附在血管內的膽固醇,令新陳代謝更好,減肥收腿就輕鬆得多。



3.香蕉 雖然卡路里很高,但脂肪卻很低,而且含有豐富鉀,又飽肚又低脂,可減少脂肪在下身積聚,是減肥時候的理想食品。



4.蘋果 蘋果含獨有的蘋果酸,可以加速代謝,減少下身的脂肪,而且它含的鈣量比其他水果豐富,可減少令人下身水腫的鹽分。



5.紅豆 紅豆所含的石鹼酸成分可以增加大腸的蠕動,促進排尿及減少便秘,從而清除下身脂肪。



6.木瓜 它有獨特的蛋白分解酵素,可以清除因吃肉類而積聚在下身的脂肪,而且木瓜肉所含的果膠更是優良的洗腸劑,可減少廢物在下身積聚。



7.西瓜 它是生果中的利尿專家,多吃可減少留在身體中的多餘水分,而且本身的糖分也不高,多吃也不會致肥。



8.蛋 蛋內的維他命B2有助去除脂肪,除此之外,它蘊含的菸鹼酸及維他命B1可以去除下半身的肥肉。



9.西柚 大家早早便知西柚卡路里極低,多吃也不會肥,但原來它亦含豐富鉀質,有助減少下半身的脂肪和水分積聚。



10.蒟蒻 完全不含脂肪又美味,說到底也是減肥必食之物,原來它的豐富植物纖維更可以使下身的淋巴暢通,防止腿部腫得鬆泡泡。



11.菠菜 因為它可以促進血液循環,這樣就可以令距離心臟最遠的一雙腿都吸收到足夠養分,平衡新陳代謝,排毒瘦腿就話咁易。



12.西芹 西芹一方面含有大量的鈣質,可以補「腳骨力」,另一方面亦含有鉀,可減少下半身的水分積聚。



13.花生 含有極豐富的維他命B2和菸鹼酸,一方面帶來優質蛋白質,長肉不長脂,其次亦可以消下身脂肪肥肉。



14.奇異果 除了維他命C是它的強項外,原來其纖維亦十分豐富,可以增加分解脂肪的速度,避免腿部積聚過多的脂肪。



15.番茄 新鮮的番茄可以利尿及去除腿部疲憊,減少水腫的問題,如果是生吃的話,效果更好。

世界公认十大健康水果

世界卫生组织专家评出了10种对健康最有利的水果。其中苹果排名第一,因为苹果富含纤维物质,可补充人体足够的纤维质,降低心脏病发病率,还可以减肥。许多美国人把水果作为瘦身必备,每周节食一天。

排在苹果之后的是杏,然后分别是香蕉、黑莓、蓝莓、甜瓜、樱桃、越橘、葡萄柚和紫葡萄。它们各自的优点如下:

第二名:杏,含有丰富的β胡萝卜素,能帮助人摄取维生素A;  
第三名:香蕉,钾元素的含量很高,对人的心脏和肌肉功能很有好处;
第四名:黑莓,同等重量黑莓中纤维物质的含量是其他水果的3倍多,对心脏健康有帮助;
第五名:蓝莓是种特别的水果,多吃蓝莓可减少尿路感染的几率;  
第六名:甜瓜,维生素A和C的含量都很高,是补充维生素的理想食品;
第七名:樱桃,能帮助保护心脏健康;
第八名:越橘,能帮助减少尿路感染的几率;
第九名:葡萄柚,维生素C的含量很高;
第十名:紫葡萄,其类黄酮等物质能对心脏提供三重保护。

对付身体小毛病27妙招集录

你肯定被牙痛骚扰过,你也肯定遇到过鼻出血不止的情况。当时怎么解决的?是不是仰着头,等待止血,任凭血倒灌入喉腔……其实这种方法是不对的,耐心看看下面的文章,小编教你n多家庭妙招,来对付身体的小毛病。

  1.换季疲劳:在季节更替的时候经常发生换季疲劳,给自己做一个“安眠枕”。在枕套下面多放些气味芬芳的杀菌植物叶片:月桂、蕨、榛树、针叶、薄荷和玫瑰花瓣。

  2.眼睛红肿:用香芹汁湿敷消除眼睛红肿,将香芹切成小细段装入纱布袋内放入开水中。过15-20分钟取出,冷却,放在眼皮上10分钟。

  3.牙齿酸痛:丁香油中的芳香物质可以消除疼痛,消灭细菌。把棉棒浸入丁香油后放到病牙上,可以帮助你缓解疼痛。

  4.打嗝:如果通常的方法(a.慢慢地大口喝一杯凉水;b.用双臂抱住自己做深吸气,然后尽量长时间屏住呼吸)不奏效,试一下用月桂叶浸液摆平打嗝。在一杯开水内放入3-4片月桂叶,浸泡一阵,每次打嗝时喝10-15滴。

  5.血管堵塞:大概酒精蒜是最好的清理血管的方法。将40克蒜捣碎,兑入100毫升白酒,放置10-15天。每日2-3次,饭前30分钟饮用,每次10滴。这种方法可以清理阻塞,让血管有弹性,还可以治疗慢性头疼。

  6.食欲过旺:藏疗法:用中指肚按住上嘴唇和鼻子之间的穴位几分钟。饭前喝一杯矿泉水或者西红柿汁。

  7.刺:如果你把自己“浸湿”,刺就会自己钻出来。先泡个热水澡,然后拿双层餐巾纸擦拭皮肤,以便挤压出刺来。另一种方法:在扎刺周围的皮肤涂上一滴植物油。它会渗入皮肤,软化刺,这时用镊子夹出或者用消毒后的针挑出。

  8.咳嗽:用酒精或者白酒按摩胸廓,使之发热,然后马上盖上一层薄的温热的药用蜡,直至冷却。使用此法帮助直至康复。

  9.头晕:不要躺下、也不要闭上眼睛,这样只会使症状恶化。红辣椒可以帮助你。倒杯热水,捏一捏辣椒末放入杯中,小口喝下。水和辣椒可以使你的血液升
温,刺激血液流入大脑,头疼就缓解了。如果你的手边没有辣椒,找一个舒适的地方坐下,松开衣领,沿顺时针方向按摩太阳穴。

  10.脓包:如果脓包已经“出头”,红肿着,用消毒水已经没有用了。碘酒也不要用了,更不能挤压,否则它会更明显。用酒精(白酒、花露水)擦拭,然后混合等量牙膏和男用剃须滋润霜,将混合物涂在脓包上,等待大约15分钟,直至变干,然后小心擦掉。脓包会变小、发白。

  11.体内垃圾:用植物油涂抹身体,按摩身体大约10分钟左右,最好用专门的浴刷。然后泡个热水澡,仔细地用浴球、浴液洗去植物油。这之后毛孔打开,开始流汗排除体内垃圾。
 
  12.紧张:瑜珈最简单的呼吸运动可以帮助你神情自若,哪怕是上班时间也可以做。摆一个舒服的姿势:可以坐着,也可站着,慢慢地深呼吸。呼气的时间要比
吸气的时间长两倍。努力集中精力,只想呼吸过程:甚至可以“听到”空气不只在肺内循环,还在肚子里循环。消除紧张情绪,这样做10分钟左右就够了。

  13.口臭:口气不清新的一个原因是口干。通常是因为吸烟,长时间聊天,情绪紧张。柠檬瓣可以帮助你摆脱口臭。把柠檬瓣放在舌头上5-7分钟,不时地吸一下。

  14.流鼻血:不能躺下,头也不能向后仰,更不能用棉球堵住鼻子。需要坐下,头稍稍往前低,最好用带冰的水袋放在鼻梁上,如果身边没有,那么把手绢用冷水沾湿,然后用手绢用力按住流鼻血的那个鼻翼2-3分钟,这时用嘴均匀呼吸。

  15.血压低:当你感觉血压开始降低时,换一个舒服的坐姿,解开衣领,顺时针按摩太阳穴。或用柠檬汁或香水几滴擦拭太阳穴。然后,可以喝一杯中等浓度的咖啡。

  16.双手出汗:通常是因为植物性导管错位,也可能是由于神经问题。每天喝30滴缬草、益母草或者芍药浸液,早上用橡树叶或者洋甘菊浸液加水(一汤勺浸液兑一升水)浸泡双手。

  17.偏头痛:经常是因为疲劳过度、室内闷热、饥饿和不安,也可能由于遗传因素造成。苹果醋蒸气浴方法可以消除或者至少是减轻头痛。在锅内放入相同数量的醋和水,用小火烧开。当开始冒蒸气时,将头低至锅上方,呼吸蒸气,吸气60-75次就可以了。

  18.烫伤:养一盆天竺葵(老鹳草),它对烫伤特别管用。在开水烫伤的时候,取新鲜的天竺葵叶子盖在伤口上,用绷带缠好。过10-12小时重复一次。通常烫伤在有限的几天里痊愈,不会留下疤痕和斑点。

  19.关节:
(1)当关节刚刚开始酸痛时,取新鲜的圆白菜叶,在菜叶内部涂上蜂蜜。用它做护膝包住膝盖(最好借助于有弹力的绷带),直到酸痛停止再取下来。
(2)在锅内将普通的沙子炒热后放在脚跟处,这样关节自己就会变热。这个配方特别适合痛风,但是,有静脉曲张的情况不适用。

  20.眼四周细小皱纹:用大拇指按压眼睛外角1厘米处的穴位,每个穴位每分钟按3次。

  21.醉后不舒服感:在躺下睡觉前喝几杯水(最好是蜂蜜水):它会帮助你减轻第二天早上的痛苦。如果早上起来还是感觉不舒服,那么,无论是药片,还是盐溶液都帮不了你,贴个芥末膏在小腿上,在额头上放块冰。过半小时你的症状就会减轻。

  22.黑眼圈:如果你的黑眼圈不是因为慢性疾病,而是因为睡眠不足,用沾了凉浓咖啡(3汤勺咖啡兑100克开水)的湿布敷在黑眼圈部位。咖啡因是非常好的血管收缩剂,这种方法青光眼患者禁用。

  23.预防感冒:如果你准备牛奶咖啡和三明治做早餐,可以在每片粗粮面包上涂薄薄一层黄油和2-3瓣捣碎的蒜。蒜层上还可以放些干酪和蔬菜。这样的早餐的秘密在于:蒜可以消灭所有的细菌,而牛奶咖啡可以消除蒜味。

  24.掉头发:擦碎一个洗净的土豆,榨出土豆汁,加入2汤勺芦荟汁和20克蜂蜜。把这种混合物转圈涂在头部皮肤上,用毛巾将头发包2个小时,然后仔细洗净。每周进行这种疗法两次,会获得效果。

  25.嗓子痛:当你刚刚着凉,感觉嗓子发痒和嗓子不舒服时,用两茶勺苹果醋兑入一杯凉开水中。喝掉三分之一,其余的每小时漱口一次。通常一昼夜疼痛就会消失。

  26.吸烟:正确的排除体内尼古丁的方法:取2-3汤勺燕麦(可以带壳),洗净,倒入2-3升水中。然后用小火烧开后再煮15-20分钟。然后把锅包起来,放在暖和的地方一昼夜,过滤后,放入冰箱。每日服3次,每次120克,饭前半小时服用。

  27.失眠:如果你经常失眠,那么准备些薰衣草香精油或者普通的新鲜柠檬。睡前半小时在灯泡上滴上1-2滴薰衣草香精油或者柠檬汁,挥发的物质作用于大脑,使身体放松、镇定。

一句话把您逗了

1 如果白痴会飞,那我的公司简直是个机场。

2 所有的男人生来平等,结婚的除外。

3 咱们是否可以找个地方喝上一杯,交个朋友?或者说,还是我直接给把钱包给你?

4 我想,只要我再稍微具有一些谦虚的品质,我就是个完美的人了。

5 如果您需要咨询或建议,我们将免费提供;如果您需要正确的答案,请您另外付费。

6 过去,闹钟响的时候,我常常有把它拍了再继续睡的毛病,但是自从我在闹钟旁边放了三个老鼠夹之后,我的毛病就根除了。

7 如果说贝多芬是交响乐之父,那么是不是说贝多芬的父亲是交响乐之爷?

8 我做过很多愚蠢的事情,但是我毫不在乎,我的朋友把它叫做自信。

9 盲人协会真诚劝告您:千万不要酒后驾车。

10 我想我应该去减肥了,上次献血的时候,居然流出了一百毫升的猪油。

11 把俩条虫子做实验。威士忌里的那条死了,证明喝威士忌肚子里不长虫子。

12 我的创造力高得无法形容,我的工作能力强得无法形容,我的文字能力妙得无法形容。

13 假如计算机每重启一次,比尔盖茨都可以得到一元钱,那么他可要发了。

14 十年后,法院第二次判杀人犯死刑。

15 我假装为老板工作,老板假装付给我薪水。

16 我和妻子已经18个月没说话了,我没机会打断她。

17 有没有听过大猪说有,小猪说没有的故事?

18 我从来不看电视,我只不过是经常核对一下报纸上的电视节目有没有印错。

19 你的眼睛就象天上的明月,一只初一;一只十五。

20 你这个孩子怎么不懂事啊?舅舅正在这里,你怎么还会想到要去动物园看狗熊?

21 我的视力很差,比如说,看见那边墙上那颗图钉没有?你看得见吧,而我就看不见。

22 每天我都不断地刷新一项世界纪录--我在世界上已经生活的天数。

23 在因特网世界,你的女朋友可能是一位男性,而你的男朋友可能是一位女性,这很痛苦,但你得接受。

24 你的射击成绩真是太糟了,我要是你,我就立刻自杀,为以防万一你要多带一些子弹的。

25 如果你要和老虎比谁更能挨饿,那你赢定了。

26 我把电视遥控器别在腰上,作出一付买了新手机的样子。

27 只是有钱并不能让人幸福,所以我还偷些珠宝、邮票、手表什么的

28 生活真是没劲儿,上个月我的一个哥们儿向我借了4000块钱,说要去做一个整形手术,结果现在我完全不知道他变成什么模样了

29 抢劫者须知:本行职员只懂西班牙语,请您抢劫时一定要有耐心,最好携带翻译一名,谢谢!

30 你瞎了眼啊?这么大的盾牌你看不见,偏偏要把石头朝我脑袋上扔!

31 各位!今天是我太太30岁生日10周年纪念日!

32 钱输光了,家具也输光了,衣服也输光了,我现在出门像一个阿拉伯人.

33 我比较健忘,于是老婆常叮嘱我,说下雨天外出办事千万别拉了雨伞,所以家里现在已经有十把雨伞了.

34 除了一项,其余栏目填得都挺好,关系这一栏应该填岳母,而不应该填紧张。

35 爸爸今天打了我两次,第一次是因为看见了我手里两分的成绩单,第二次是因为成绩单是他小时候的。

36 悲剧好比是我不小心切掉了自己的小手指;喜剧好比是你不小心掉进了下水道。

37 争吵的时候,男人和女人的区别就像是步枪和机关枪的区别。

38下面,我将公布史密斯先生的遗嘱,在公布遗嘱之前,我想满怀诚意地问一句,史密斯夫人,您是否愿意接受我的求婚?

39 别骂自己的孩子是小兔崽子,因为从遗传学的角度来讲,这对家长是不利的。

40 老婆,我不该用床单擦皮鞋,不过出差刚回来,一时半会儿还改不过来,我错了。

41 为提高产品的安全性,我们决定在可乐瓶子瓶盖上加印:请打开这一端;在瓶底上加印:请打开另一端。

42记者:根据最近一项调查显示,国民对国内外时事的关心度很低,议员先生,您对此有何看法?议员:没有看法,我不关心

43 玛丽,如果你不答应嫁给我,我就立刻去自杀,这是我的一贯做法。

44 选择题:假如律师和政客同时掉进河里,请问你是去喝咖啡还是去看电影?

45 如果不是发生在我身上的话,那么这件事可真是太好笑了。

46 您想拥有一副好的牙齿吗?这里送给你三点经验:一、饭后漱口早晚刷牙;二、每两年去医院检查一次牙齿;三、少管闲事。

47 秀发去无踪,头屑更出众!

48 我们总是习惯性地认为脑子是人体最重要的器官,但是别忘了这个判断是谁做的.

49 在教堂听讲经的时候我们应该保持肃静,打扰别人睡觉是很不礼貌的。

50 这些不是破烂!是我收集的古董!当然,如果你不喜欢的话,你可以扔掉.

51 人工智能和天然愚蠢无法相提并论--因为我们主张纯天然.

52 一个人如果面对众人批评仍微笑自如,那么他很可能已经找到了替罪羊.

53 昨天我报名参加了一个减肥训练班,他们要我在训练时穿宽松衣服,岂有此理?如果还有宽松衣服,那我还来报名干嘛?

19种食物vs19疾病

1、果仁巧克力豆有益大脑

吃果仁巧克力有利于大脑健康?没错!但这可不是巧克力的功劳,而是裹在巧克力里面的杏仁。杏仁中含有的维生素E,可有效地延缓大脑因年龄导致的衰老问题。

一般每天摄取两盎司就够了。科学家还认为,杏仁巧克力之所以对大脑有益,心理原因也不能忽视。在感到焦虑,忧郁或心情不佳时,吃一包杏仁巧克力豆无疑是对自己小小的宠爱和嘉奖。

2、视线模糊和绿色蔬菜

眼睛只要睁着,就随时有被感染的可能。绿色蔬菜可以补充足够的抗氧化素,因此可以保护眼睛的健康,让眼睛免受外界的侵害。所以不妨在每日的饭桌上多一点绿色蔬菜,例如芹菜、黄瓜等等都对健康大有益处。

3、鱼治疗哮喘

最新的研究发现:多吃鱼类可以润肺、补肺,从而缓解哮喘病的症状。这是因为鱼肉中含有丰富的镁元素,难怪急诊室的医生都用含镁类药物来治疗哮喘病人。对于患严重哮喘的病人,医生建议:最好每日三餐中保证吃至少一顿的鱼类或其它 海鲜 类食物。另外,在绿色蔬菜中,菠菜也有同样的功效。

4、蔬菜和关节炎

希腊的科学家最近做的实验表明:绿色蔬菜吃得越多,患关节炎的可能性就越小。

这是科学家针对330人进行的试验中得出的结论。而且,爱吃蔬菜的人老年患关节炎的可能性是不爱吃蔬菜人的1/4。因此,为了健康的骨骼,千万不要忘记在餐桌上多增些绿色。

5、牙出血和葡萄柚

牙龈发炎是让人烦恼的事,不过一旦遇到这种情况也不必担心,因为牙龈发炎其实

是体内缺乏维生素C的症状,是你的身体向你发现的求救信号,提醒你该补充维生素了。这时吃一些葡萄柚、柠檬、猕猴桃等含维生素C丰富的水果都会很有帮助,尤其是葡萄柚,效果更是立竿见影。所以,只要养成每天坚持吃一只葡萄柚的习惯,就会帮你解决牙龈发炎的问题。

6、口气浑浊多喝水

对于经常需要社交应酬的人来说,口气浑浊可是最大的忌讳。中医认为口臭与 胃火有很大关系,因此,治疗口臭除了注意每天早晚刷牙外,还要合理安排你的食谱。 另外一种简单易行的方法也能让你摆脱这个让人尴尬的烦恼,就是每天尽可能 地多喝清水。这个方法在治疗口臭的同时,还补充了身体每天所需水分。科学研究发现:口气不清新的原因是嘴里有一种叫硫磺的物质,要让它尽快消失,每天多多喝水就解决了。

7、四肢乏力与香蕉

热爱运动是件好事,但也要注意“度”的把握,因为运动过量会导致浑身乏力。运动时身体排出大量汗液,水分流失的同时,身体中很多矿物质也随着汗水排出体外,主要是钾和钠两种元素。身体中纳的“库存”量相对较大,而且纳也比较容易从食物中得到补充;但钾元素在体内的含量比较少,因此运动后更要注意选择含有丰富钾元素的食品及时补充。补充钾最理想的选择就是香蕉,因为香蕉中含有丰富的钾元素。所以下次在去健身房前,千万别忘了给自己带一两根香蕉。

8、醉酒与西红柿

喝醉了酒确实是件麻烦事,仅仅是翻江倒海的呕吐就够让人难受的了。喝醉后的呕吐不仅很失态,而且会造成体内的钾、钙、钠等元素的大量流失,醉酒呕吐后一定要及时补充钾、钙、钠等养分。最简单易行的办法就是喝些西红柿汁,因为西红柿汁中丰富的钾、钙、钠成分刚好补充了体内流失元素的不足。

9、打嗝和糖

对于治疗打嗝,人们一直有很多偏方,目前最有效的方法就是出其不意时吓唬他一下,但如果这样还是不能止住打嗝的话,这里有一个虽不是立竿见影却被证明十分有效的方法;可以试试在舌头下面放一勺糖。这种做法的科学解释还不很清楚,有的医生解释说,糖可以刺激喉咙后侧的神经,而一旦神经受到刺激,它会中断体内的神经信号,其中也包括引起打嗝的那条神经。

10、心脏病和啤酒

啤酒可以美容已经不再是什么新闻了,但啤酒还有另外一种功效就是:可以减少患心脏病的可能性。实验证明;如果保持一天喝一杯啤酒,就会使患心脏病的可能性减到最小。有趣的是,啤酒的保健功能要严格控制在一天一杯才会有效,一天两杯或两杯以上都不会防治心脏病。看来,啤酒虽好也并非多多益善,同样需要节制。

11、腹泻和红酒

试验表明,在刚刚开始有腹泻症状的时候,喝一两杯红酒就可以治愈。而且,调查发现:白葡萄酒和红葡萄酒比药店里卖的治腹泻的药更自然而且更有效。特别是在杀死PB大肠杆菌方面,红葡萄酒的威力更加明显,红葡萄酒不仅能治疗腹泻,而且还能防患于未然,难怪有人在吃海鲜的时候要以葡萄酒佐餐。

12、高血压和橘子汁

爱喝橘子汁是个好习惯,尤其是对于那些患高血压的人或是有高血压家族病史 的人 来说尤为如此。橘子汁不仅味美,而且可以治病。因为如果饮食中钾和钙的含量增加,血压就会自然降低。而橘子汁里恰恰含有丰富的钙、钾和维生素C。有试验表明,血液中含充足维生素C的人,死于心脏病的可能性要小得多。

13、感冒和大蒜

当你开始感到嗓子不舒服,鼻涕开始不听使唤时,就是感冒的前兆。为了不让感冒病毒大规模地袭击你的身体,赶紧吃一些大蒜会帮助你将没有完全发作的病毒扼杀在摇篮里。大蒜为什么具有如此神奇的功效?这是因为大蒜中含有丰富的抗病毒成分,会增强身体的免疫力。所以,在换季的时候,多吃一些大蒜会帮你应付感冒。

14、心脏病与苹果汁

苹果在所有的水果中是“口碑”最好的,而且适合不同年龄,不同体格的人。 最近,美国加利福尼亚大学的研究又发现了苹果的另外一个优点:常喝苹果汁会降低心脏常喝苹果汁会降低心脏 病的患病率。这是因为苹果汁中的抗氧化剂有利于心脏的健康运转。科学家在对25名男女进行的试验中发现:胆固醇也分“好”和“坏”两种,多喝苹果汁可以“坏”胆固醇阻塞血管的时间比正常情况下晚,而“坏”胆固醇阻塞血管的时间越长 就说明患心脏病的几率越大。因此,西谚中的那句:“每天一苹果,医生远离我”也就有据可寻了。

15、牙痛和茶

和好友聚会品茶时你也许没有想到:茶不仅对身体健康有益处,而且最近科学家还发现了茶叶的另外一个优点,即:茶叶有保护牙齿的作用。茶水中含有丰富的氟和茶多酚等成分,可以达到防龋固齿的功效。因此,饭后用茶水漱口可以保持口腔卫生。另外,茶叶中的糖,果胶等成分与唾液发生化学反应滋润了口腔的同时,还增强了口腔的自洁能力。

16、皮肤青紫与花椰菜

有些人的皮肤一旦受到小小的碰撞和伤害就会变得青一块紫一块的,这是因为 体内缺乏维生素(尤其是维生素K)的缘故。补充维生素K的最佳途径就是多吃花椰菜,据调查显示,每周吃几次花椰菜会使血管壁加厚、加强,而且不容易破裂。

17、脱发和牛排

如果说吃牛排可以治疗秃头,相信大部分人一定会大吃一惊。但经过科学研究发现:牛排确有此功效。如果你不想年纪轻轻就成了“地方包围中央”,每次吃饭时千万别忘了吃点儿瘦牛肉。科学证明:经常吃瘦牛肉的人即使不能完全许诺解决脱发问题,至少可以延缓这一天的到来。

18、前列腺癌和香草冰激凌

前列腺癌一直是男人的最大杀手,据说多吃西红柿会有所帮助,因为西红柿里 面有 西红柿素。如果你不爱吃西红柿的话,另外一个既能治病又能解馋的方法就是吃香草冰激凌。这是因为香草冰激凌里有一种叫做硼的元素,体内的硼越多,前列腺癌 的发病机会就越小。

19、记忆力和咖啡

咖啡除了可以在早上帮你尽快消除困意,还有很多其他的功用。荷兰的科学家 曾做过一个试验:试验前,被测试者喝下含32毫克咖啡因的咖啡后,不但记忆力加强,阅读速度提高,而且头脑也变得更加清醒。所以,想要刺激大脑内存速度,提高工作效率的话,最好提前半个小时喝上一杯咖啡。但是,需要提醒你注意的是:咖啡也不能喝得太多。否则会产生依赖反应,久而久之还会上瘾。如果一旦上瘾,想戒可就难了。

可不可以 静静的地老天荒- -

  春暖花开了,亲爱。
  不经意里就是花纷纷絮飘飘的季节。春风吹绿了杨柳稍,也吹开了我们的心情。行走于芳香盈满的小径,感受着暖风拂面拂发的温情,看那叶绿花开的生机盎然与蓬勃。是一年中最为繁华的季节呢。忍不住就思绪翩飞了。  
  已经习惯了文字。却也明白,很多时候,文字的表达都是苍白和空洞的。在我长久的淡然和忧欢里,岁月渐长渐老。宁静和清苦,艰辛与抗衡,善良与纯净,便是我生活全部的精彩了。知道是不合时宜的。却又固执的不肯背叛。 
  总想能够把心弦的极致保留一生,以人淡如菊的方式。是记忆里顽固至深的画面。野菊的粲然,在晚秋的凉风中那样的悄无声息,以生命的光彩显示出近乎不合时宜的庞大与抗衡。在山野,在远离尘世的富贵与奢华之地,韵致楚楚,悄然出尘。那种趋于原始的单纯和清淡,有着酷煞而热烈的气质,让人无法拒绝。风的爱抚,阳光的爱抚,沿根须缓缓上升的泥土的爱抚,就如此在不知不觉中以平民化的方式表达出来。无可辩驳的顺理成章。
  竟是很想学一下陶潜。可以东篱采菊,把酒数花,可以在午后日光的倾斜里,看那大片的逼人的金菊在清凉的微风里摇曳,铺陈出古往今来阳光野地里的清静与安然。你于山间坎坎伐檀,我于陌上欣然采薇。在向晚的黄昏里,看如缕炊烟袅袅升起。平民一样简简单单的生活。  
  看着我,不要叫醒我。即使没有阳光,我也要晒晒心情。  
  可生命中最美好的一瞬永远遥不可及。世事繁杂,且还要为生计四处忙碌奔波。于是常常在自己编织的童话里彷徨。而在物质与精神的抗争里,却总是占山为王者占上风。我们都行走于世俗的红尘大道,很无奈的面对风和雨。不得不低头,不得不忍痛割爱。只是还是困惑。妥协妥当吗?  
  总是有些东西会萦绕于心的:一个眼神,一朵浅浅的笑靥,一句两句到位却含蓄的情话,或者,就是那种尽在不言中的心心相印。是生命里一份不可测量的情感。无论多少年,都不会忘记。无论遭遇什么,都不肯放弃。即使无法表达,即使只可藏于心底。  
  将曾经所有的文字一一翻阅。将全部的爱与恨,艰辛与岁月,起伏与平静,装订成一部在水之湄的书册,典藏起来。所有属于时光的故事,属于追求的韵致,都会在长发飘飘的情怀里慢慢从容和淡定。不会如生命般无常却恒定的生与死。 
  我们会在这部典藏中相逢吗?人不会如草一样规律的枯荣,却有着自始至终追寻如一的情感。我们生命的神性所在也不外乎此。始终都不知道它将如何将临及带来如何的结局。却始终坚信相逢是首歌。无论那相遇是戏剧化的辗转,还是一览无余的平阔江波,都是如许美丽和甘愿。仿佛人间仙境。  
  不会没有相逢的。你不到来,我不敢紊乱我精致的舞步。
  只是,亲爱,很想知道。如果有那么一天,我们可不可以,就这样,如菊般,静静的地老天荒?

Delphi 元件撰写常问问题

第一部分 简介

1.1 此份文件的目的为何?



这份文件的目的是为了解答有关撰写 Delphi元件时常见或文件上找不到的问题。我曾经花了一段很长的时间来了解探索 TDataLink 类别,这让我觉得应该将撰写元件时常遇到的问题及经验心得写下来,分享给大家。不过我并不能保证写在这份文件里头的解答完全正确。如果你对其中的任何问题有更好的解决方法,或认为有什麽资讯适合放在这份文件里的话,请告知作者。有任何错误或缺漏也欢迎指正。



除了再加上更多的问题及解答外,我试著再补充两个部分:



进阶程式设计师喜爱的工具:这也许跟元件设计没有直接的关系但至少它们跟 Delphi有关系。

值得参考的文件刊物:由於空间的关系,这份文件不能放置太多的范例程式,因此参考其它文件是十分需要的。这不是一份教材式的文件,我不会做太多条理式的说明,但会试著将最具有参考价值的文献列出。

如果你有任何意见或建"",欢迎来信告诉我。







--------------------------------------------------------------------------------





第二部份 ""合环境

2.1 在""合环境中如何找出元件所产生的问题?



我发现唯一能找出问题的方法只有:



在 Delphi ""合环境的 Tools|Options 对话框的 Library 页中将『Compile with debug info』选项打勾。

选 Component|Rebuild Library 重新编译元件库。

从 Turbo Debugger 中执行 Delphi。

选File|Change Dir移至包含元件程式码的目录下。

如果你的元件发生GPF时就可以检视堆叠然後得知到底是哪些发生问题了。



2.2 如何检视 Delphi 所产生的组合语言码?



Glen Boyd 的回答:



开启登录编辑程式(REGEDIT.EXE),接著到『HKEY_CURRENT_USER\Software\Borland\Delphi\2.0\Debugging』下新增一个字串机码『EnableCPU』,将它的字串值设为『1』。此後Delphi""合环境的View选单下就会多一个『CPU』选项,它会开启一个视窗来检视目前程式指令的记忆体及组合语言。你可以在侦错时利用单步追踪或其它方法来观察它。



2.3 我可以在执行时期动态建立元件,但在设计时期就会发生错误。为什麽?



你的元件必须继承自TComponent类别或其衍生类别。

你的元件建构函式及灭构函式宣告必须看起来像这样:

constructor Create(AOwner: TComponent); override;



destructor Destroy; override ;



所有在published区段宣告的栏位型态必须是ordinal、single、double、extended 、comp、currency、string、small set(译注:指元素编号不超过0..31这个范围的集合;平常的集合可容许的范围为0..255)、method pointer或class其中一种。如果你宣告了其它型态的栏位,Delphi编译器并不会检查出错误。然而当你使用这个元件时依然会得到一个GPF。

如果你想让TMyComponent元件可以在设计时期操作,注意下面的宣告会引发十分严重的问题:



type TComplex = record



RealPart: Double;



ComplexPart: Double;



end;



class TMyComponent = Class(TComponent)



private



F1: TComplex;



published



property P1: TComplex read F1 write F1;



end;



2.4 如何撰写一个无法放置到表格上的元件?



Ray Lischner 的回答:



如果你不想让使用者将元件拉曳至表格上的话,使用 RegisterNoIcon 及 RegisterClass 程序来注册元件。



2.5 在程式码编辑器中快速切换程式区段最简单的方法是什麽?



Ray Konopka 的回答:



在探索 VCL 原始程式码时,强烈建""你最好熟悉程式码编辑器里的书签功能。使用方法很简单:Ctrl-Shift-N,N 是从 0 至 9 的数字,用来设定一个书签。此後就可以使用 Ctrl-N 来跳跃至书签处。(译注:使用这项功能真的可以节省你许多来回卷动程式及找寻函式的时间,别迟疑了,快学吧!)



2.6 如何使我的元件在按下滑鼠右键时出现快速功能选单?



你必须要建立一个元件编辑器。元件编辑器决定了元件在设计时期时对滑鼠键的反应及动作,你可以为元件定义它自己的快速功能选单。



建立元件编辑器的步骤大致如下:



从 TComponentEditor 类别继承一个新的类别。

改写类别的 GetVerbCount、GetVerb及 ExecuteVerb方法。

在 Register 程序中使用 RegisterComponentEditor 程序来注册此元件编辑器。

有关元件编辑器这个主题在『Developing Delphi Components』这本书中有详尽的解说及资讯。



2.7 为什麽元件在设计时期会出现『I/O 103』的错误?



你可能在元件中使用了Writeln这个程序。



2.8 为什麽元件编辑器不会将元件属性的变动储存起来?



我发现有时自制的元件编辑器不会将元件属性储存起来。设计时期一切正常,但是储存起来再重新读入後就有问题了。



原因是你很可能忘了在元件编辑器中呼叫此方法:



Designer.Modified;



如此一来Delphi才会知道你的元件编辑器更改过属性值了。







--------------------------------------------------------------------------------





第三部分在元件中使用其它元件

3.1 如何在元件中加入卷轴元件并让它在设计时期能动作?



你的卷轴元件类别必须处理 CM_DESIGNHITTEST 元件讯息才行。



TMyScrollBar = class (TScrollBar)



procedure CMDesignHitTest



(var Message: TCMDesignHitTest); message CM_DESIGNHITTEST;



end;



procedure TMyScrollBar.CMDesignHitTest( var Message: TCMDesignHitTest);



begin



Message.Result := 1;



end;



你的元件必须以以下方法建立卷轴:



TMyScrollBar.Create(nil);



而不是



TMyScrollBar.Create(Self);



3.2 如何建立Windows95式样的卷轴?



你必须设定卷轴的页面大小。你可以用以下的程式码来做:



procedure SetPageSize(ScrollBar: TScrollBar; PageSize: Integer);



var



ScrollInfo: TScrollInfo;



begin



ScrollInfo.cbSize := Sizeof (ScrollInfo);



ScrollInfo.fMask := SIF_PAGE;



ScrollInfo.nPage := PageSize;



SetScrollInfo (ScrollBar.Handle, SB_CTL, ScrollInfo, True);



end;



要取得目前页面大小可用如下方法:



function GetpageSize (ScrollBar: TScrollBar): Integer;



var



ScrollInfo: TScrollInfo;



begin



if HandleAllocated then



begin



ScrollInfo.cbSize := SizeOf (ScrollInfo);



ScrollInfo.fMask := SIF_PAGE;



GetScrollInfo (ScrollBar.Handle, SB_CTL, ScrollInfo);



Result := ScrollInfo.nPage;



end;



end;







--------------------------------------------------------------------------------





第四部分 Bound Controls

4.1 哪里可以找得到有关 TDataLink 类别的说明文件?



我可以大胆地说全世界有关 TDataLink 的说明文件只有一份,就在这儿:



属性 (Property) 介绍

property Active: Boolean(唯读)



当此 DataLink 连结至一个已开启的 DataSource 时会传回 True。当 Active 状态改变时会 触发ActiveChanged方法。



property ActiveRecord: Integer(可读写)



用来设定或取得 DataLink 缓冲区中目前所指向的记录代码,代码的范围是 0 .. BufferCount - 1。使用它来设定记录代码时必须小心不要超过这个范围,否则可能导致不可预期的错误。



property BufferCount: Integer(可读写)



DataLink 拥有一个资料缓冲区。而 BufferCount 属性即用来设定或取得缓冲区大小,缓冲区大小决定了一个dataset同时可以显视的资料记录笔数。对大部分的资料感知元件来说,BufferCount 的值是 1;但对 TDataGrid 来说,BufferCount 代表它的可视列数目。



property DataSet: TDataSet(唯读)



传回此 DataLink 所连结的 DataSet。其实就是 DataSource.DataSet。



property DataSource: TDataSource(可读写)



传回此DataLink所连结的DataSource。



property DataSourceFixed: Boolean(可读写)



这个属性可用来防止 DataSource 属性被更改。如果此属性设为 True,当我们试著改变 DataSource 属性时会引发一个例外。



property Editing: Boolean(唯读)



如果 DataLink 正处於编辑状态则传回 True。



property ReadOnly: Boolean(可读写)



设定 DataLink 是否为唯读状态。这个属性并不会影响所连结的 DataSet。在唯读状态下这个 DataLink 无法进入编辑状态。



property RecordCount: Integer(唯读)



传回DataSet的资料记录数目。



方法 (Method) 介绍

function Edit: Boolean;



让所连结的DataSet进入编辑状态。传回值: 成功传回 True ,失败传回 False



procedure UpdateRecord;



我们不直接呼叫这个方法,它是提供其它程式来呼叫的。这个方法只有设定一个旗帜然後呼叫 UpdateData 方法。



虚拟方法 ( Virtual Method )

要让 TDataLink 物件与元件沟通必须改写下列这些方法:



procedure ActiveChanged



当连结的 DataSource 开启状态改变时会呼叫此方法。使用 Active 属性可以得知目前是否为开启状态。



procedure CheckBrowseMode



资料库有任何改变之後都会先呼叫这个方法。



procedure DataSetChanged;



当下列任一事件发生时都会呼叫此方法:



移至DataSet的开头

移至DataSet的结尾

在DataSet中插入或新增资料

删除DataSet的资料

取消DataSet的编辑

更新记录

如果不想改写这个方法只要在其中呼叫:



RecordChanged(nil);



procedure DataSetScrolled(Distance: Integer)



每当目前记录变更时会呼叫此方法。Distance 参数代表缓冲区欲卷动的行数。(其值范围皆在 -1 .. 1 之间)。使用 ActiveRecord 属性可以取得缓冲区中目前所指向的记录。我们无法强制让 DataLink 的缓冲区卷动。



procedure FocusControl(Field: TFieldRef)



与TField.FocusControl方法相同。



procedure EditingChanged



当 DataLink 的编辑状态改变时会呼叫此方法。使用 Editing 属性可以得知DataLink 是否 正处於编辑状态。



procedure LayoutChanged



当 DataSet 的 Layout 改变时会呼叫此方法(例如新增一个column)。



procedure RecordChanged(Field: TField)



当下列任一事件发生时都会呼叫此方法:



目前记录进入编辑状态

目前记录内容更动

procedure UpdateData



在一笔记录被更新以前会呼叫此方法。你可以呼叫 Abort 程序来防止资料库更新。



4.2 如何得知一个 dataset 中有几笔记录?



TDateSet 的 RecNo 属性可以传回资料记录的数目,但很不幸地它只适用於 dBase 及 Paradox 的资料表格。若想得知目前资料记录的编号,可以从 TDataLink 类别衍生一个新的类别,然後进行下 列步骤:



改写 DataSetScrolled 方法以取得目前记录是否被卷动。

改写 DataSetChanged 方法来确认目前记录是否跳至最前面或最後面了。

接著你可以将这个新类别的物件连结到TDataSource物件上然後就可以随时得知目前的记录编号了。







--------------------------------------------------------------------------------





第五部分 VCL

5.1 使用""合环境除错时如何追踪检视 VCL元件的程式码?



将你想要追踪的 VCL 原始程式单元拷贝至存放专案的目录中并重新编译元件库,此後你就可以在那些 VCL单元中追踪检视程式码了。



5.2 我的元件参考到其它元件,如何得到参考元件被消灭的讯息?



Max Nilson 的回答:



TComponent 类别提供了 Notification 方法。当一个元件被移除时我们可以利用这个方法得到消息以进行适当的反应。你可以参考『Component Writer's Guide』内有关 Notification 及FreeNotification 这两个方法的说明。



当你的元件参考到另一个元件,例如,你的元件中有一个 TDataSource 型态的属性。那 你必须改写此元件的 Notification 方法,在其中检查被移除的元件是否就是本身所参考的元件。预设情况下,当元件被移除时,所有其它在同一个表格上的元件才会收到消息,如果参考元件位於另一个表格上时,你的元件无法得知这件事情。Delphi 2.0 推出了TDataModule,参考元件位於另一个表格上的机会大幅增加,所以你应该利用 FreeNotification 方法来确定当参考元件移除时,你一定可以得到消息。



如果你不改写 Notification 方法来处理参考元件被移除的讯息,这会让 Delphi""合环境陷入十分不稳定的状态。它可能不会立刻当掉,但你也不能再正常地继续其它工作了。



下面是一个范例,当你的元件参考其它元件时,千万记得要做以下的处理:



TMyComponent = class (TComponent)



private



FDataSource: TDataSource;



procedure SetDataSource(Value: TDataSource);



protected



procedure Notification(AComponent: TComponent; Operation: TOperation); override;



published



property DataSource: TDataSource read FDataSource write SetDataSource;



end;



procedure TMyComponent.SetDataSource(Value: TDataSource);



begin



if Value FDataSource then



begin



FDataSource := Value;



// 告诉参考元件说,当它被移除时记得通知我一声。



if FDataSource nil then FDataSource.FreeNotification(Self)



end;



end;



procedure TMyComponent.Notification(AComponent: TComponent; Operation:TOperation);



begin



inherited Notification(AComponent, Operation);



// 如果被移除的正是参考元件,把FDataSource栏位清除。



if (Operation = opRemove) and (AComponent = FDataSource) then



FDataSource := nil



end;



5.3 什麽是元件讯息?



元件讯息是什麽?它十分类似Windows的视窗讯息,只有一点不同:元件讯息只适用於 VCL 元件;而视窗讯息可以用在系统内所有具有 window handle 的控制项或视窗。如果你有一个具有 Font 属性的元件(例如TLabel元件),当我们更改它的 Font 属性时并没有送出视窗讯息(译注:TLabel 元件不是视窗控制项,根本也没有视窗 Handle可以让我们传送视窗讯息),但是控制项仍然知道字型改变了所以要重画自己,为什麽?因为我们有元件讯息。



元件讯息不可以由虚拟方法来处理,这可能是设计 VCL 时的考量,大概是因为不想让虚 拟方法表格(Virtual Method Table)过於庞大的原因。



『Secrets of Delphi 2.0』这本书对於所有的元件讯息有十分详尽的解说。



接下来我们列出一些比较常见的元件讯息及它们的作用。标示著『Notification Only』 的讯息表示送出这个讯息只是为了通知元件某件消息而己,并不传入任何参数而且也不需要传回值。



CM_ACTIVATE (Notification Only)



当表格成为焦点视窗时会传给本身这个讯息。



CM_CTL3DCHANGED (Notification Only)



当控制项的Ctl3D属性更改时会传给本身这个讯息。



CM_DESIGNHITTEST 参数:TCMDesignHitTest 传回值:0或1



在设计时期当滑鼠移到元件上头时,""合环境会送给此元件这个讯息。此讯息的目的用来决定元件在设计时期是否要处理滑鼠讯息。如果传回值是 1,""合环境就让元件自行处理滑鼠讯息;若传回值是 0,则""合环境会帮你处理滑鼠讯息。如果传回值永远是 1,那麽元件的快速功能选单则永远不会出现;如果元件不处理这个讯息或永远传回 0,那此元件在设计时期将无法对滑鼠讯息做任何反应。



CM_FONTCHANGED (Notification Only)



控制项的字型改变後送给本身此讯息。



CM_FONTCHANGE (Notification Only)



当控制项收到WM_FONTCHANGE视窗讯息时会送给本身这个讯息。



CM_PARENTCTL3DCHANGED (Notification Only)



当元件父控制项的Ctl3D属性改变或设定新的父控制项时会收到此讯息。



CM_PARENTCOLORCHANGED (Notification Only)



当元件父控制项的 Color 属性改变或设定新的父控制项时会收到此讯息。



CM_PARENTFONTCHANGED (Notification Only)



当元件父控制项的Font属性改变或设定新的父控制项时会收到此讯息。



CM_PARENTSHOWHINTCHANGED (Notification Only)



当元件父控制项的ShowHint属性改变或设定新的父控制项时会收到此讯息。



CM_WININICHANGE 参数:TWMWinIniChange 传回值:无



当控制项收到WM_WININICHANGE视窗讯息时会送给本身这个讯息。



5.4 我的元件得到输入焦点後仍不能接受键盘讯息,为什麽?



如果你的元件有 DragMode 属性而且将它设成 dmAutomatic 时,很有可能让你的元件以为它正被拖曳但实际上并没有的情况。在 Controls 单元中有一个区域变数 DragControl 指 向目前正被拖曳的元件。你遇到的情况很可能就是明明没有拖曳的动作但是DragControl 变数却指向你的元件。在 TWinControl 的 WndProc 方法中,当 DragControl 变数指向元件本身时,会忽略所有键盘讯息,这就是原因了!







--------------------------------------------------------------------------------





第六部分 其它资讯

6.1 有哪些书介绍或讲解如何撰写元件?



有关撰写元件的『标准』参考书籍:



『Developing Delphi Components』 作者:Ray Konopka 出版:Coriolis Group



下面这本书并不专注於元件写作,但里面提到许多元件撰写者不可不知的资讯:



『Secrets of Delphi 2』 作者:Ray Lischner 出版:Waite Group



另外一本元件撰写的好书,它有许多在『Developing Delphi Components』里找不到的资讯:



『Programming Delphi Custom Components』 作者:Fred Bulback 出版:M Books



6.2 有哪些Web站台可以取得撰写元件的资讯?



全世界最大的 Delphi Web 站台『Delphi SuperPage』



(译注:亚洲地区使用者可以就近到位於日本的 Mirror Site )



我在下面这些站台中找到许多元件的原始程式码:



Temple of Delphi

Delphi Free Stuff

(译注:『Your Delphi Programming Resource』""理元件也十分用心! )

(译注:台湾地区目前维持最好的 Delphi 站台是『32 Bit Delphi 深度历险』及其 Mirror Site)

你也可以使用一些搜寻引擎来寻找有关 Delphi 的站台:



Yahoo

Alta Vista

(译注:Excite 搜寻引擎也别错过罗!)





--------------------------------------------------------------------------------





第七部分 元件的储存与载入

7.1 如何将包含其它物件的物件一起存入 DFM 档?



我试过许多方法,包括改写元件的 DefineProperties及 WriteComponents方法,但都还是失败了。所以我只能说要解决这个问题的话只有使用 Delphi 原本的方法一途。



将包含其它物件的物件一起储存起来的步骤大致如下:



确定你要储存的所有物件都是从 TComponent 类别衍生下来的。

将所有需要储存的变数宣告在 published 区段。

在元件的 Register 程序中呼叫 RegisterComponents程序来注册所有你要储存起来的类别。

每个拥有子控制项的类别必须改写 GetChildren 方法以储存每个子控制项。(在 Delphi 1.0 中你必须改写 WriteComponents 方法并且为每个子控制项呼叫 WriteComponent方法)。

将物件载入的方法用了点小技巧。你必须改写元件的 GetChildOwner 及 GetChildParent 方法,否则 Delphi会将所有物件的拥有者都设定为元件所在的表格。(在Delphi 1.0 中你必须改写ReadState方法)。



7.2 如何得知元件是否正从资料流中读出?



当元件正从资料流中读出时,它的 ComponentState 属性会包含csLoading 旗帜。



constructor TMyClass.Create(AOwner: TComponent);



begin



if csLoading in AOwner.ComponentState then



begin ... end



else



begin ... end;



end;



7.3 如何确定元件的属性是否被正确地储存?



有许多很简单的方法可以验证属性是否被正确地储存在档案里:



在""合环境中用滑鼠右键点选表格然後选择『View as Text』。然而万一 DFM 档 有任何错误的话,你将什麽也看不到。

开个 DOS 视窗,利用 Delphi 所附的『Convert』程式将 DFM 档转成文字格式。

Stefan Hoffmeister 指出复制或剪下元件後,到任何一个文书编辑器(如记事本)中贴上,你就可以看到此元件的文字表示。你甚至可以编辑这些文字表示後再将它贴回 Delphi""合环境的表格上。







--------------------------------------------------------------------------------





第八部分 Delphi 的工具

8.1 有没有Delphi版本的 YACC 及 LEX?



有。Albert Graef 这位仁兄写了 Turbo Pascal 版本的 YACC 及 LEX,也可以让 Delphi 使用。



你可以在 ftp://ftp.simtel.net/pub/simtelnet/msdos/turbopas 下取得 tply30a1.zip 及 tply30a2.zip 这两个档案,其中还包含这两个工具的原始程式哦!



8.2 如何秀出 JPEG 格式图形档?



Jacques Nomssi Nzali 将 Independent JPEG Group 所发展的免费 JPEG 程式库改写成 Pascal 版本。你可以从下取得:



PASJPG10.ZIP



Independent JPEG Group 的免费 JPEG 函式库 rev 6a 之 Pascal 版本 (1.0 版)。







--------------------------------------------------------------------------------





第九部分 基本程式设计技巧

9.1 如何建立不定数目的物件阵列?



最简单的方法是使用 TList 类别。我发现从 TList 衍生一个新类别很有用处。接下来的程式码示范如何为一个特定型态撰写一个特别的 TList 类别,并且加进基本的错误检查。



TListOfMyObject = class (TList)



private



function GetItems(Index: Ordinal): TMyObject;



public



property Items[Index: Ordinal]: TMyObject read GetItems;



procedure Add(AObject: TMyObject);



end;



function TListOfMyObject.GetItems (Index: Ordinal): TMyObject;



begin



if Index = Count then



raise Exception.CreateFmt('Index(%d) outside range 1..%d', [Index, Count-1]);



Result := inherited Items[Index];



end;



procedure TListOfMyObject.Add (AObject: TmyObject);



begin



inherited Add(AObject);



end;



9.2 Delphi 2.0的 WinCrt单元到哪去了?



Delphi 2.0并没有 WinCrt单元。 先别伤心,这是因为我们可以用其它方法来取代它。在 Project|Options 的 Linker 页次中将『Generate console application』选项打开,你就可以像以前使用 WinCrt 单元一样地写程式了!



9.3 自制元件时该从哪个类别继承?



VCL 中有一些『自订』类别,而且有许多控制项是直接由这些『自订』类别继承下来的。例如 TMemo 直接继承自 TCustomMemo类别。这些自订类别写好了所有该控制项所拥有的功能,只是没有将属性公开出来而己。大部分情形下,你应该从那些自订类别继承而不是控制项类别。



如果你要从头撰写自己的元件,那麽从 TCustomControl 类别继承是个不错的主意。撰 写出来的元件会具有 Window Handle 且可以接受输入焦点。



另外根据你的需要也可以从这些类别继承:



TGraphicControl:视觉元件,但是没有window handle,也不能接受输入焦点。

TComponent:不可视元件,你没办法在执行时期看到它。

TWinControl:将已存在的视窗元件包装起来,如Windows标准控制项或VBX元件。





--------------------------------------------------------------------------------





第十部分 进阶程式设计技巧

10.1 Delphi 有与 C++ 一样的 I/O Stream 类别吗?



答案可以说有也可以说没有。Delphi允许你建立自己的『文字档驱动程式』,它可以让你使用Delphi 标准的 I/O 函式库来处理非标准的 I/O,如处理 UNIX 格式的文字档或处理 Socket 所取得的资料。虽然没有像 C++ 的 I/O Stream 类别那麽强大但应该也足够一般用途使用了。



建立『文字档驱动程式』的方法在『Object Pascal Language Guide』中有明述。此 外你也可以参考 VCL 的 Printer 单元。



Delphi有 TStream 类别,不过是设计用来将物件写入资料流的,不像 C++ 的 I/O Stream 类别那麽具有弹性。



10.2 如何取得列举型态变数的文字表示?



使用 TypInfo单元中的 GetEnumName 函式:



type



TMyType = (Value1, Value2);



var



TypeValue: TMyType;



begin



Writeln (GetEnumName(TypeInfo(TMyType), Ord(TypeValue));



end;



TypInfo单元中还有许多与型别资讯有关的函式。



『Secrets of Delphi 2.0』这本书有许多关於TypInfo单元的资讯,值得参考。







--------------------------------------------------------------------------------





第十一部分 元件虚拟方法

11.1 如何得知元件的window handle是何时建立的?



控制项的 window handle 是在 CreateWnd 方法中建立的。如果你想要在建立 window handle 後接著做某些动作那麽你应该改写 CreateWnd 方法:



procedure TMyClass.CreateWnd;



begin



// 现在还没取得 window handle



inherited CreateWnd;



// 呼叫 inherited 以取得 window handle



// 在这里撰写你想要执行的动作



end;



11.2 如何得知是否表格上所有元件都已载入完成?



Loaded 方法是在载入完成後接著被呼叫的。



procedure TMyClass.Loaded;



begin



inherited Loaded;



// 将ComponentState中的 csLoading 状态清除



// 在这里撰写你想要执行的动作



end;



11.3 在哪里绘制元件最适合?



你应该拦截 WM_PAINT 视窗讯息然後利用 Canvas 来绘制元件。然而 VCL 己经帮你拦 截好了,你只须改写元件的 Paint 方法即可。



procedure TMyClass.Paint;



begin



// 如果你的元件是己存在的元件继承下来的,那麽必须在这里呼叫 inherited Paint



inherited Paint ;



// 在这里撰写你想要执行的动作



end;



11.4 如何改变元件的视窗式样?



CreateParams方法用来设定元件的视窗式样及其它必须传递至 CreateWindowEx API 的 参数。要改变元件的视窗式样,例如增加或拿掉元件的垂直卷轴只要改写 CreateParams 方法:



procedure TMyControl.CreateParams(var Params: TCreateParams);



begin



inherited CreateParams(Params);



if IWantAScrollBar then



Params.Style := Params.Style or WS_VSCROLL



else



Params.Style := Params.Style and not WS_VSCROLL;



end;







--------------------------------------------------------------------------------





第十二部分 Windows API

12.1 元件卷动时闪动的很厉害,如何克服这种情况?



要卷动元件本身最简单的方法就是改变它的座标然後重画元件,但是这方法会导致元件闪动的很厉害。



比较好的方法是呼叫 ScrollWindow 或 ScrollWindowEx Windows API。



闪动的另一个原因可能来自於 WM_PAINT 及 WM_ERASEBKGND。你可以试著拦截 WM_ERASEBKGND 及 WM_PAINT 讯息然後自己处理绘图动作,包括绘制背景的动作,或许可以改善闪动的情况。



12.2 如何重新启动Windows?



使用 ExitWindowsEx Windows API。



12.3 如何快速大量地更改元件资料?



在进行大量资料更改前後,利用 WM_SETREDRAW 讯息来控制你的元件暂时不要重画,这不但可以使资料设定速度增快也防止元件闪烁的情况。







--------------------------------------------------------------------------------





第十三部分 控制项边框

13.1 为什麽我的元件的 Ctl3D 属性设为 True 之後,它依然没有 3D 的边框呢?



如果 ControlStyle 属性内没有包含 csFramed 旗帜那麽 Ctl3D 属性就会没有作用。在元件 的建构函式内加上:



ControlStyle := ControlStyle + [csFramed];



13.2 如何实作 BorderStyle 属性?



在控制项设定有没有边框之後要重新建立 window handle:



FBorderStyle: TBorderStyle;



procedure SetBorderStyle(Style: TBorderStyle);



property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle;



procedure CreateParams(var Params: TCreateParams); override;



procedure TMyControl.CreateParams(var Params: TCreateParams);



begin



inherited CreateParams(Params);



if FBorderStyle = bsSingle then



Params.Style := Params.Style or WS_BORDER



else



Params.Style := Params.Style and not WS_BORDER;



end;



procedure TMyControl.SetBorderStyle(Style: TBorderStyle);



begin



if Style FBorderStyle then



begin



FBorderStyle := Style;



// 重新建立window handle



RecreateWnd;



end;



end;







--------------------------------------------------------------------------------





第十四部分 控制项式样

14.1 当元件重绘时如何防止闪动的情况?



如果元件的 ComponentStyle 属性没有包含 csOpaque 旗帜的话,呼叫 Invalidate方法时 会导致元件的背景先被擦掉再重绘。如果你在 Paint 方法中绘制背景,那你应该在元件的建构函式中加上:



ComponentStyle := ComponentStyle + [csOpaque];



Max Nilson的回答:



引起闪动另一个原因可能是 WM_ERASEBKGND 讯息的处理。当 VCL 控制项收到一个 WM_ERASEBKGND 讯息时,它会将元件的背景擦掉然後设定成预设的颜色。如果你的元件衍生自 TWinControl,而且元件的颜色与背景颜色不同(例如图形),每次重画以前都会将元件先清成背景颜色再重绘,这就是造成闪动的原因了!



解决的方法不难,你必须告诉 Windows 你要自行解决『所有的』绘图动作。不过有一个前提是,你一定要确定你的 Paint 方法将""个元件都画过,如果你漏了什麽地方忘了画,那个部分的资料会由乱数组成,你能想见这情况吗?使用这个方法可以加速你的元件绘制动作(稍微快一点点),因为少了一个填满背景颜色的动作。



type



TMyComponent = class (TWinControl)



...



protected



procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;



...



end;



procedure TBMyComponent.WMEraseBkgnd(var Message: TWMEraseBkgnd);



begin



// 不要重绘背景,这会造成元件闪动



Message.Result := 0



end;







--------------------------------------------------------------------------------





第十五部分 视窗讯息

15.1 为什麽我的元件得不到方向键的讯息?



你必须拦截 WM_GETDLGCODE 才能处理方向键的讯息,在 WM_GETDLGCODE 的讯息处理 者中传回 DLGC_WANTARROWS。如果你不这样做,那方向键的功用就只能用来移动视窗焦点而己。



Max Nilson 的回答:



想要你的元件能够处理方向键,你必须要拦截 CM_WANTSPECIALKEY 元件讯息。 CM_WANTSPECIALKEY 元件讯息提供你比拦截 WM_GETDLGCODE 视窗讯息更容易且灵活的判断方法来决定是否需要某些特殊键的讯息。当控制项收到任何一个特殊键时就会送出CM_WANTSPECIALKEY 元件讯息给控制项。



特殊键包括:VK_TAB、VK_LEFT、VK_RIGHT、VK_UP、VK_DOWN、VK_RETURN、VK_EXECUTE 、VK_ESCAPE 及 VK_CANCEL。如果讯息传回值是非零值,这个键就会被送至 KeyPress 方法以供处理,否则这个键的讯息会被送至元件的父控制项,以预设方式来处理。



一个简单的范例:



type



TMyComponent = class (TWinControl)



...



protected



procedure CMWantSpecialKey(var Message: TCMWantSpecialKey); message CM_WANTSPECIALKEY;



...



end;



procedure TMyComponent.CMWantSpecialKey(var Message: TCMWantSpecialKey); begin



inherited;



// 我们只想处理向左方向键,其它的特殊键都给 Windows 处理



if Message.CharCode = VK_LEFT then



Message.Result := 1;



end;



CM_WANTSPECIALKEY 元件讯息比 WM_GETDLGCODE 讯息更具有弹性的地方在这儿。我们甚至可以根据是按下的是哪个特殊键才决定是否处理这个键。例如,你的控制项有三张影像,你可以让使用者利用左右方向键来回检视它们,如果翻到最後一张影像再按向右键时,焦点就让它离开元件,剩下的全部都让 Delphi 来处理。



15.2 有没有与 Visual Basic『DoEvents』同样功能的函式?



有。Application.ProcessMessages方法。





2006-12-13

信息学竞赛辅导之教材的选择

照从基础到提高到深入的顺序,一般按照下面的顺序进行教材的阅读和学习:

初级篇:


· 全国信息学奥林匹克联赛培训教程(一)(普及本) 吴文虎等 著
ISBN:7302074003
装帧:平装 印次:1-4
定价:19.8元
图书简介:
中国计算机学会信息学奥林匹克丛书由中国计算机学会信息学奥林匹克专业委员会主编,由全国著名专家学者精心编著而成。
本 书是本套丛书普及本中培训教程的第一册,它针对联赛考核的知识点,系统地介绍了计算机的基础知识和利用Pascal语言进行程序设计的方法,并通过大量的 实例具体阐述了阅读程序的方法和技巧。与本书同进出版的培训教程第二册在第一册的基础上,进一步讲解了程序测试、效率分析和程序设计中的数据结构和算法的 基本内容,并提供了如何提高算法效率的具体策略。
本书作者依据学生已有的认识经验,对书的内容作了周密的安排。教程体系合理、概念清晰、例题丰富、文字流畅、通俗易懂。
本书既可以作为全国信息学奥林匹克联赛的培训教材、联赛辅导教师的参考用书、参赛选手的自学用书,也可作为大中专院校相关专业以及电脑爱好者的参考书。


· 全国信息学奥林匹克联赛培训教程(二)(普及本) 吴文虎等 著
ISBN:7302074100
装帧:平装 印次:1-2
定价:23.8元
图书简介:
“中国计算机学会信息学奥林匹克系列丛书”由中国计算机学会信息学奥林匹克科学委员会主编,由全国著名专家学者精心编著而成。
本 书是本套丛书普及本中培训教程的第二册,它在第一册的基础上,针对联赛考核的知识点,讲解了程序测试、效率分析和程序设计中数据结构和算法等内容,并提供 了提高算法效率的具体策略,不仅能帮助刚刚迈进信息学奥林匹克竞赛大门的参赛选手掌握程序设计的基本知识,更从启迪思维的角度引导他们如何分析问题和解决 问题。本书带提供了大量的例题及解题算法,以帮助读者更深刻的理解和掌握解题思路,并在实战中灵活运用。
本书深入浅出、思路清晰,既可作为全国信息学奥林匹克联赛的培训教材、联赛辅导教师的参考用书、参赛选手的自学用书,也可作为大中专院校相关专业以及电脑爱好者的参考书。


· 全国信息学奥林匹克联赛试题精解(2001-2003)普及本 吴文虎等 著
ISBN:7302090246
装帧:平装 印次:1-2
定价:18.6元
图书简介:
《中 国计算机学会信息学奥林匹克系列丛书》由中国计算机学会信息学奥林匹克科学委员会主编,由全国著名专家学者精心编著而成。本书收录了全国信息学奥林匹克联 赛2001年至2003年的全部复赛试题,所有试题都给出了具体的算法分析和参考程序清单。对于其中一些试题,不仅给出了常用的基本算法,而且还提供了比 较巧妙的优化算法,以开阔思路,启发思维。
本书深入浅出,可读性强,既适合教师辅导学生使用,也适合参加信息学奥林匹克联赛的学生自学,同时也是大专院校的计算机爱好者学习编程的优秀参考书。

《全国青少年信息学奥林匹克联赛培训教材(中学)》
《全国青少年信息学奥林匹克联赛培训习题与解答(中学)》

----------------------------

中级篇:

全国青少年信息学奥林匹克联赛培训教材(中学高级本)

全国青少年信息学奥林匹克联赛培训教材(中学高级本)
全国青少年信息学奥林匹克联赛培训习题与解答(中学高级本)

南京大学出版社 2004.06版 292页 平装

《实用算法的分析与程序设计》(传说中的黑宝书)


作  者: 吴文虎 王建德
出 版 社: 电子工业出版社
ISBN : 750534402


· 信息学奥林匹克竞赛指导 ——图论的算法与程序设计(PASCAL版) 吴文虎 著
ISBN:7302022372
装帧:平装 印次:1-3
定价:16元
图书简介:
本书介绍了有关图论的基本概念和典型的图论算法,结合历届赛题分析如何反一个实际问题抽象化为数学中的图论问题,并给出了程序解法。

· 组合数学的算法与程序设计—青少年国际和全国信息学奥林匹克 吴文虎 著
ISBN:7302822038
装帧:平装 印次:1-3
定价:19元

数据结构与算法设计--Pascal语言(青少年信息学奥林匹克竞赛培训教材)
数据结构与算法设计--Pascal语言(青少年信息学奥林匹克竞赛培训教材)
作者:
张文双、王学红、郭莲凤
出版社:北京理工大学出版社 出版日期:2006年6月1日
页数:259 装帧:平装
开本:16开 版次:1
ISBN:756400743

----------------------------

高级篇:

算法导论(第二版 影印版)

算法导论(第二版 影印版)
本 书自第一版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考手册。本书全面论述了算法的内容,从一定深度上涵盖了算法的诸多方面,同 时其讲授和分析方法又兼顾了各个层次读者的接受能力。各章内容自成体系,可作为独立单元学习。所有算法都用英文和伪码描述,使具备初步编程经验的人也可读 懂。全书讲解通俗易懂,且不失深度和数学上的严谨性。第二版增加了新的章节,如算法作用、概率分析与随机算法、线性编程等,几乎对第一版的各个部分都作了 大量修订。

计算机程序设计艺术(英文影印版)(1-3卷精装全套)
计算机程序设计艺术(英文影印版)(1-3卷精装全套)
该 套图书共3卷,内容如下: 卷1为基础运算法则,该书以基本的编程概念和技术为开始,然后讲述信息结构--计算机内信息的表示法,数据元素间的结构关系以及处理它们的有效方法。主要 应用于模拟、数字方法、符号计算、软件和系统设计。许多简单和重要的运算法则和技术已添加到前一版本中,精确的初步计算部分已经修改,以适应当前趋势。 第2卷对半数值算法领域做了全面介绍,分“随机数”和“算术”两章。本卷总结了主要算法范例及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间 的相互联系。第3版中特别值得注意的是Knuth对随机数生成程序的重新处理和对形式幂级数计算的讨论。 卷3为分拣和搜索,这是本书的第1个修订版,它是对计算机分拣和搜索的一流技术的最全面的研究,它扩展了卷1中数据结构的处理方法,将大小数据库以及内存 和外部存储都包含在内。本书包括对计算机方法仔细检查的选择方案,和其效率的大量分析。本书该版的独特之处在于优化了的分拣,以及对通用散列法和排列法的 新的理论论述。

Windows 2003系统使用SyGate代理上网故障

学校机房近日将系统升级至Windows 2003,为了强化管理,我们放弃了Windows自带的ICS共享,使用SyGate代理共享上网。不料在使用过程中出现了一系列的问题,笔者颇费了一番脑筋。

故障一:启用SyGate后,学校所有的学生机均可共享上网,服务器却出现刚开机时能上网,几分钟后不能上网的现象。

原因分析:学生机既然能够上网,表明网络是连通的。我们换用Windows自带的连接共享则一切正常,由此推断故障原因很可能是SyGate配置问题。但是,不管如何更改设置,故障依然存在。

突 然想到了一件事:在配置两块网卡的IP地址等信息时,我们曾将各自的网关设置成不同的值,在完成设置时还出现了如图1所示的对话框。SyGate是一个网 关类的代理软件,是不是在网卡属性中配置了两个网关而导致SyGate出现问题呢?于是我们在网络设置中将内网网卡的网关删除后重新启动计算机,故障消 失。

对Google作恶手册

这是一篇翻译稿件,作者:Philipp Lenssen,翻译人hidecloud:这里将为你介绍如何在一个月内,利用Google提供的一系列服务进行恶搞.看完之后,一面寒一面不得不佩服老外天马行空的想象能力.

1. 在blogger.com上创建一个垃圾blog.利用GOOGLE NEWS提供的自动推送热门新闻服务,将每日的最热点话题发往你的blog.

2. 复制WIKIPEDIA的内容,因为它是免费共享的.利用此内容创建一个网站,并将GOOGLE ADS装扮成内容的样子,嵌入进你的网站中.等待一到两个星期吧,GOOGLE会索引你的页面,并将无辜的搜索者引向你的页面.

3. 为GOOGLE个人页面服务创建一个插件,而此插件的唯一目的就是用来宣传你的网站.

4. 雇用12个俄国点击工来点击你的广告.教他们学会切换代理服务器,以此让GOOGLE不会发现他们在使用同一IP地址.钱就这样来了.

5. 在GOOGLE的BLOGSPOT上到处留言.雇用一些贫困的程序员去破解GOOGLE的防机器人自动留言程序.

6. 创建一个包含各种产品的大型数据库(并不是你拥有的,但点击会得到报酬),再自动为每个产品生成大量的不同名字,即使拼写错误也行.然后,将这些发布到GOOGLE BASE去,一周内,你会发现新的收入来了.

7. 成为一个版权律师,在GOOGLE IMAGES里搜索由未成年人提供的违反版权保护的图片,然后去威胁他们的父母向你付款.

8. 在GOOGLE MAPS上任何一个热点位置购买广告位,然后将你的广告写成这样:小张,我XXX(将小张换成你恨的某人).

9. 告诉中国GOV,XYZ.COM(将XYZ换成你竞争对手的网站)上有关于人RIGHT的内容.一两周后你就会发现XYZ.COM在GOOGLE.CN上被屏蔽了.

10. 购买200万个便宜的域名,互相连接他们.等待他们在GOOGLE RANKING里升高后,就开始在上面出售伟哥吧.

Delphi中的WebBrowser的编程

  1. OLECMDEXECOPT_DODEFAULT);//保存
  2. PROPERTIES, OLECMDEXECOPT_DODEFAULT);//查看属性
  3. 初始化和终止化(Initialization Finalization)

     
     大家在执行TWebBrowser的某个方法以进行期望的操作,如ExecWB等的时候可能都碰到过“试图激活未注册的丢失目标”或“OLE对象未注
    册”等错误,或者并没有出错但是得不到希望的结果,比如不能将选中的网页内容复制到剪贴板等。以前用它编程的时候,我发现ExecWB有时侯起作用但有时
    侯又不行,在Delphi生成的缺省工程主窗口上加入TWebBrowser,运行时并不会出现“OLE对象未注册”的错误。同样是一个偶然的机会,我才
    知道OLE对象需要初始化和终止化(懂得的东东实在太少了)。

      我用我的前一篇文章《Delphi程序窗口动画
    决》所说的方法编程,运行时出了上面所说的错误,我便猜想应该有OleInitialize之类的语句,于是,找到并加上了下面几句话,终于搞定!究其原
    因,我想大概是由于TWebBrowser是一个嵌入的OLE对象而不算是用Delphi编写的VCL吧。

      initialization

       OleInitialize(nil);

      finalization

       try

        OleUninitialize;

       except

       end;

      这几句话放在主窗口所有语句之后,“end.”之前(需引用ActiveX单元)。
  4. 使WebBrowser获得焦点

      TWebBrowser非常特殊,它从TWinControl继承来的SetFocus方法并不能使得它所包含的文档获得焦点,从而不能立即使用Internet Explorer本身具有得快捷键,解决方法如下:

      procedure TForm1.SetFocusToDoc;

      begin

       if WebBrowser1.Document nil then

        with WebBrowser1.Application as IOleobject do

         DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser1, 0, Handle, GetClientRect);

      end;

      除此之外,我还找到一种更简单的方法,这里一并列出:

      if WebBrowser1.Document nil then

       IHTMLWindow2(IHTMLDocument2(WebBrowser1.Document).ParentWindow).focus

      刚找到了更简单的方法,也许是最简单的:

      if WebBrowser1.Document nil then

       IHTMLWindow4(WebBrowser1.Document).focus

      还有,需要判断文档是否获得焦点这样来做:

      if IHTMLWindow4(WebBrowser1.Document).hasfocus then
  5. 打印、打印预览和页面设置: 调用“打印”、“打印预览”和“页面设置”对话框(IE5.5及以上版本才支持打印预览,故实现应该检查此命令是否可用)。

    ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, EmptyParam,

               EmptyParam);

          if QueryStatusWB(OLECMDID_PRINTPREVIEW)=3 then

           ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT,

               EmptyParam,EmptyParam);

          ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_DODEFAULT, EmptyParam,

               EmptyParam);

  6. 切、复制、粘贴、全选: 功能无须多说,需要注意的是:剪切和粘贴不仅对编辑框文字,而且对网页上的非编辑框文字同样有效,用得好的话,也许可以做出功能
    特殊的东东。获得其命令使能状态和执行命令的方法有两种(以复制为例,剪切、粘贴和全选分别将各自的关键字替换即可,分别为CUT,PASTE和
    SELECTALL):

       A、用TWebBrowser的QueryStatusWB方法。

         if(QueryStatusWB(OLECMDID_COPY)=OLECMDF_ENABLED) or

          OLECMDF_SUPPORTED) then

          ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, EmptyParam,

               EmptyParam);

       B、用IHTMLDocument2的QueryCommandEnabled方法。

         var

          Doc: IHTMLDocument2;

         begin

          Doc :=WebBrowser1.Document as IHTMLDocument2;

          if Doc.QueryCommandEnabled('Copy') then

           Doc.ExecCommand('Copy',false,EmptyParam);

         end;
  7. 字体大小

      类似“字体”菜单上的从“最大”到“最小”五项(对应整数0~4,Largest等假设为五个菜单项的名字,Tag 属性分别设为0~4)。

       A、读取当前页面字体大小。

         var

          t: OleVariant;

         Begin

          WebBrowser1.ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,

           EmptyParam,t);

          case t of

          4: Largest.Checked :=true;

          3: Larger.Checked :=true;

          2: Middle.Checked :=true;

          1: Small.Checked :=true;

          0: Smallest.Checked :=true;

          end;

         end;

       B、设置页面字体大小。

         Largest.Checked :=false;

         Larger.Checked :=false;

         Middle.Checked :=false;

         Small.Checked :=false;

         Smallest.Checked :=false;

         TMenuItem(Sender).Checked :=true;

         t :=TMenuItem(Sender).Tag;

         WebBrowser1.ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,

          t,t);
  8. 添加到收藏夹和整理收藏夹

         const

         CLSID_ShellUIHelper: TGUID = '{64AB4BB7-111E-11D1-8F79-00C04FC2FBE1}';

        var

         p:procedure(Handle: THandle; Path: PChar); stdcall;

        procedure TForm1.OrganizeFavorite(Sender: Tobject);

        var

         H: HWnd;

        begin

         H := LoadLibrary(PChar('shdocvw.dll'));

         if H 0 then

         begin

        p := GetProcAddress(H, PChar('DoOrganizeFavDlg'));

          if Assigned(p) then p(Application.Handle, PChar(FavFolder));

         end;

         FreeLibrary(h);

        end;

        procedure TForm1.AddFavorite(Sender: TObject);

        var

         ShellUIHelper: ISHellUIHelper;

         url, title: Olevariant;

        begin

         Title := Webbrowser1.LocationName;

         Url := Webbrowser1.LocationUrl;

         if Url '' then

         begin

          ShellUIHelper := CreateComObject(CLSID_SHELLUIHELPER) as IShellUIHelper;

          ShellUIHelper.AddFavorite(url, title);

         end;

        end;

     
     用上面的通过ISHellUIHelper接口来打开“添加到收藏夹”对话框的方法比较简单,但是有个缺陷,就是打开的窗口不是模式窗口,而是独立于应
    用程序的。可以想象,如果使用与OrganizeFavorite过程同样的方法来打开对话框,由于可以指定父窗口的句柄,自然可以实现模式窗口(效果与
    在资源管理器和IE中打开“添加到收藏夹”对话框相同)。问题显然是这样的,上面两个过程的作者当时只知道shdocvw.dll中
    DoOrganizeFavDlg的原型而不知道DoAddToFavDlg的原型,所以只好用ISHellUIHelper接口来实现(或许是他不够严
    谨,认为是否是模式窗口无所谓?)。

      下面的过程就告诉你DoAddToFavDlg的函数原型。需要注意的是,这样打开的对话框并不执行
    “添加到收藏夹”的操作,它只是告诉应用程序用户是否选择了“确定”,同时在DoAddToFavDlg的第二个参数中返回用户希望放置Internet
    快捷方式的路径,建立.Url文件的工作由应用程序自己来完成。

        procedure TForm1.AddFavorite(IE: TEmbeddedWB);

         procedure CreateUrl(AUrlPath, AUrl: PChar);

         var

          URLfile: TIniFile;

         begin

          URLfile := TIniFile.Create(String(AUrlPath));

         RLfile.WriteString('InternetShortcut', 'URL', String(AUrl));

         RLfile.Free;

         end;

        var

         AddFav: function(Handle: THandle;

          UrlPath: PChar; UrlPathSize: Cardinal;

          Title: PChar; TitleSize: Cardinal;

          FavIDLIST: pItemIDList): Bool; stdcall;

         FDoc: IHTMLDocument2;

         UrlPath, url, title: array[0..MAX_PATH] of char;

         H: HWnd;

         pidl: pItemIDList;

         FRetOK: Bool;

        begin

         FDoc := IHTMLDocument2(IE.Document);

         if FDoc = nil then exit;

         StrPCopy(Title, FDoc.Get_title);

         StrPCopy(url, FDoc.Get_url);

         if Url '' then

         begin

          H := LoadLibrary(PChar('shdocvw.dll'));

          if H 0 then

          begin

           SHGetSpecialFolderLocation(0, CSIDL_FAVORITES, pidl);

           AddFav := GetProcAddress(H, PChar('DoAddToFavDlg'));

           if Assigned(AddFav) then

            FRetOK :=AddFav(Handle, UrlPath, Sizeof(UrlPath), Title, Sizeof(Title), pidl)

          end;

          FreeLibrary(h);

          if FRetOK then

           CreateUrl(UrlPath, Url);

         end

        end;
  9. 点击“提交”按钮

     
     如同程序里每个窗体上有一个“缺省”按钮一样,Web页面上的每个Form也有一个“缺省”按钮——即属性为“Submit”的按钮,当用户按下回车键
    时就相当于鼠标单击了“Submit”。但是TWebBrowser似乎并不响应回车键,并且,即使把包含TWebBrowser的窗体的
    KeyPreview设为True,在窗体的KeyPress事件里还是不能截获用户向TWebBrowser发出的按键。

      我的解决办法
    是用ApplicatinEvents构件或者自己编写TApplication对象的OnMessage事件,在其中判断消息类型,对键盘消息做出响
    应。至于点击“提交”按钮,可以通过分析网页源代码的方法来实现,不过我找到了更为简单快捷的方法,有两种,第一种是我自己想出来的,另一种是别人写的代
    码,这里都提供给大家,以做参考。
  10. A、用SendKeys函数向WebBrowser发送回车键

       
    在Delphi
    5光盘上的Info\Extras\SendKeys目录下有一个SndKey32.pas文件,其中包含了两个函数SendKeys和
    AppActivate,我们可以用SendKeys函数来向WebBrowser发送回车键,我现在用的就是这个方法,使用很简单,在
    WebBrowser获得焦点的情况下(不要求WebBrowser所包含的文档获得焦点),用一条语句即可:

       Sendkeys('~',true);// press RETURN key

       SendKeys函数的详细参数说明等,均包含在SndKey32.pas文件中。

      B、在OnMessage事件中将接受到的键盘消息传递给WebBrowser。

       procedure TForm1.ApplicationEvents1Message(var Msg: TMsg; var Handled: Boolean);

       {fixes the malfunction of some keys within webbrowser control}

       const

        StdKeys = [VK_TAB, VK_RETURN]; { standard keys }

        ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]; { extended keys }

        fExtended = 1000000; { extended key flag }

       begin

        Handled := False;

        with Msg do

        if ((Message WM_KEYFIRST) and (Message WM_KEYLAST)) and

         ((wParam in StdKeys) or

         {$IFDEF VER120}(GetKeyState(VK_CONTROL) 0) or {$ENDIF}

         (wParam in ExtKeys) and

         ((lParam and fExtended) = fExtended)) then

        try

         if IsChild(Handle, hWnd) then { handles all browser related messages }

         begin

          with {$IFDEF VER120}Application_{$ELSE}Application{$ENDIF} as

            IOleInPlaceActiveObject do

           Handled := TranslateAccelerator(Msg) = S_OK;

           if not Handled then

           begin

            Handled := True;

            TranslateMessage(Msg);

            DispatchMessage(Msg);

           end;

           end;

        except

        end;

       end; // MessageHandler

      (此方法来自EmbeddedWB.pas)

  11. 直接从TWebBrowser得到网页源码及Html

     
     下面先介绍一种极其简单的得到TWebBrowser正在访问的网页源码的方法。一般方法是利用TWebBrowser控件中的Document对象提
    供的IPersistStreamInit接口来实现,具体就是:先检查WebBrowser.Document对象是否有效,无效则退出;然后取得
    IPersistStreamInit接口,接着取得HTML源码的大小,分配全局堆内存块,建立流,再将HTML文本写到流中。程序虽然不算复杂,但是
    有更简单的方法,所以实现代码不再给出。其实基本上所有IE的功能TWebBrowser都应该有较为简单的方法来实现,获取网页源码也是一样。下面的代
    码将网页源码显示在Memo1中。

       Memo1.Lines.Add(IHtmlDocument2(WebBrowser1.Document).Body.OuterHtml);

      同时,在用TWebBrowser浏览HTML文件的时候要将其保存为文本文件就很简单了,不需要任何的语法解析工具,因为TWebBrowser也完成了,如下:

       Memo1.Lines.Add(IHtmlDocument2(WebBrowser1.Document).Body.OuterText);
  12. “查找”功能

      查找对话框可以在文档获得焦点的时候通过按键Ctrl-F来调出,程序中则调用IOleCommandTarget对象的成员函数Exec执行OLECMDID_FIND操作来调用,下面给出的方法是如何在程序中用代码来做出文字选择,即你可以自己设计查找对话框。

       var

        Doc: IHtmlDocument2;

        TxtRange: IHtmlTxtRange;

       begin

        Doc :=WebBrowser1.Document as IHtmlDocument2;

        Doc.SelectAll;    //此处为简写,选择全部文档的方法请参见第三条命令操作

                    //这句话尤为重要,因为IHtmlTxtRange对象的方法能够操作的前提是

                    //Document已经有一个文字选择区域。由于接着执行下面的语句,所以不会

                    //看到文档全选的过程。

        TxtRange :=Doc.Selection.CreateRange as IHtmlTxtRange;

        TxtRange.FindText('Text to be searched',0.0);

        TxtRange.Select;

       end;

      还有,从Txt.Get_text可以得到当前选中的文字内容,某些时候是有用的。
  13. 提取网页中所有链接

      这个方法来自大富翁论坛hopfield朋友的对一个问题的回答,我本想自己试验,但总是没成功。

      var

       doc:IHTMLDocument2;

       all:IHTMLElementCollection;

       len,i:integer;

       item:OleVariant;

      begin

       doc:=WebBrowser1 .Document as IHTMLDocument2;

       all:=doc.Get_links;             //doc.Links亦可

       len:=all.length;

       for i:=0 to len-1 do begin

        item:=all.item(i,varempty);        //EmpryParam亦可

        memo1.lines.add(item.href);

       end;

      end;
  14. 设置TWebBrowser的编码

      为什么我总是错过很多机会?其实早就该想到的,但是一念之差,便即天壤之别。当时我要是肯再多考虑一下,多试验一下,这就不会排到第11条了。下面给出一个函数,搞定,难以想象的简单。

      procedure SetCharSet(AWebBrowser: TWebBrowser; ACharSet: String);

      var

       RefreshLevel: OleVariant;

      Begin

       IHTMLDocument2(AWebBrowser.Document).Set_CharSet(ACharSet);

       RefreshLevel :=7;              //这个7应该从注册表来,帮助有Bug。

       AWebBrowser.Refresh2(RefreshLevel);

      End;
  15. 在TWebBrowser中输入字符时激活菜单的解决

     
     许多朋友编程的时候都遇到了这样一个问题,在TWebBrowser中输入时,键入的字符如果与菜单(用ToolBar做的菜单)的加速键相同就会激活
    菜单。有朋友解决办法是把加速键前面的“
    就可以想到,是ToolBar抢先处理了按键(因为ToolBar本身就设计为用来实现具有Windows新风格的菜单),所以只需要修改ToolBar
    的源代码中处理菜单按键的那部分代码即可,方法如下:

      1)、在$(Delphi)\source\vcl目录下找到comctrls.pas,拷贝到自己的程序所在目录,然后打开它。

      2)、找到TToolBar.CMDialogChar过程,把过程体注释掉(如果你愿意的话,可以修改它)。

      3)、重新编译自己的程序。

      怎么样,是不是很简单?但它确实有效。
  16. 去掉TWebBrowser的滚动条

      缺省地,TWebBrowser是滚动条的,虽然我们可以在网页中设置不需要滚动条,不过,有些时候可能会有特殊的要求,比如,网页是有滚动条的,但又想去掉它该怎么办呢?很简单,下面给出两行代码,都可以达到目的,可谓殊途同归。

      1)、IHTMLBodyElementDisp(IHTMLDocument2(WebBrowser1.document).body).scroll:= 'no';

      2)、WebBrowser1.oleobject.Document.body.Scroll := 'no';

      注:第一种方法需要在uses部分加上MSHTML_TLB或者MSHTML。
  17. 通过IUniformResourceLocator接口建立Internet快捷方式

      前面说到的显示“添加到收藏夹”模式对话框的方法中举了一个建立Internet快捷方式的例子,就其本身来说不太规范,属于取巧一类的方法。下面介绍的方法是通过接口来实现的。

      procedure CreateIntShotCut(aFileName, aURL: PChar);

       var IURL: IUniformResourceLocator;

       PersistFile: IPersistfile;

      begin

       if Succeeded(CoCreateInstance(CLSID_InternetShortcut,nil,

    CLSCTX_INPROC_SERVER,

    IID_IUniformResourceLocator,

    IURL)) then

       begin

        IUrl.SetURL(aURL, 0);

        Persistfile := IUrl as IPersistFile;

        PersistFile.Save(StringToOleStr(aFileName), False);

       end;

      end;

      其中IUniformResourceLocator接口的声明在IeConst.pas中,IeConst.pas可以在网站IE Delphi找到; IPersistfile接口的声明在ActiveX.pas中。

      注:这个函数的AURL参数必须包含协议前缀,如“Http://eagleboost.myrice.com”。
  18. 自动登录操作

    利用Delphi的Olevariant类型

    [Post=88]

    单个frames的输入

    var

    o : Olevariant;

    begin

    o := WebBrowser.OleObject.document.all.item('LoginUserID',0); />o.value := 'TEST';

    o := WebBrowser.oleobject.document.all.item('LoginPassword',0); //找到登录密码的输入框

    o.value := 'TEST'

    WebBrowser.oleobject.document.Forms.Item(0, 0).submit; //第一个表单提交

    {

    o :=WebBrowser.oleobject.document.all.item('Login',0); //或者用指定表单名称提交

    o.Click; />}

    end;

    多个frames的输入,FrameIndex为Frame的序号

    var

    o : Olevariant;

    begin

    //找到登录用户名的输入框

    o := WebBrowser.oleobject.document.documentelement.document.frames.item(FrameIndex).document.all.item('LoginUserID',0);

    o.value := 'TEST';

    //找到登录密码的输入框

    o := WebBrowser.oleobject.document.documentelement.document.frames.item(FramIndex).document.all.item('LoginPassword',0);

    o.value := 'TEST'

    //第一个表单提交

    WebBrowser.oleobject.document.documentelement.document.frames.item(FramIndex).document.Forms.Item(0, 0).submit;

    {

    //或者用指定表单名称提交

    o :=WebBrowser.oleobject.document.documentelement.document.frames.item(FramIndex)..document.all.item('Login',0);

    o.Click; />}

    end;

    [/Post]

Delphi-TwebBrowser控件与MSHTML库的连接







方法一 Document 层

WebBrowser.Document:IDispatch

Var Doc: IHTMLDocument2;

begin

...

try As 时必须加try...except...end保护

Doc:= (WebBrowser1.Document) as IHTMLDocument2;

if Assigned(Doc) then begin //判断是否为空

...//具体操作

end;

except

...

end;

...

end;

方法二 Window 层

WebBrowser.QueryInterface(IID_IHTMLWindow2, Out Win: IHTMLWindow2);//返回WebBrowser控件的IHTMLWindow2接口

Var Win: IHTMLWindow2;

Begin

...

try

WebBrowser1.QueryInterface(IID_IHTMLWindow2, Win);

if Assigned(Win) then begin //判断是否为空

...//具体操作

end;

except

...

end;

...

end;

Delphi - TWebBrowser的基本应用








先我们要认识到TWebBrowser其实是Delphi对Internet Explorer
Browser的封装,也就是说它是一个ActiveX控件,看过TWebBrowser代码的朋友会发现这个空间的所有方法的实现部分都调用了
DefaultInterface的方法,而TWebBrowser的这个属性是一个IWebBrowser2接口类型的对象,这个接口就是IE的接口。
我们在使用TWebBrowser代替IE浏览器的目的大部分是为了能够让程序处理页面,实现自动对WebApplication的请求,所以我们首先想
得到的就是TWebBrowser所浏览的内容。TWebBrowser的Documnet属性正是这一内容,Document其实是一个
IHTMLDocument2,但是它被声明为IDispatch接口类型,我们需要把它转化为IHTMLDocument2类型然后是用我们需要的各种
方法。在这里需要注意IHTMLDocument2是在MSHTML单元定义的,需要我们手动将这一单元加入到uses部分。具体代码如下:

var D : IHTMLDocument2;

begin /> D := WebBrowser1.Document as IHTMLDocument2;

end;


下来我们来看看一个网页中包含什么,也就是我们希望通过TWebBrowser来处理的内容有哪些。网页中的元素主要有普通文本内容,超级连接以及动态的
元素(Form中的元素),当然还有其它元素,但是我们在一般的处理过程中一般会用到这些,因此我在这里以这些元素为例首先我要介绍的是Form和包含在
Form中的元素的使用。

在IHTMLDocument接口中有一个Forms的属性,这个属性是
IHTMLElementCollection接口类型,其实这个Forms属性是TWebBrowser显示的页面中的所有Form元素。也就是说一个
页面中的所有Form都包含在Forms这个集合中。我们可以以使用IHTMLDocument.Forms.item(name:
OleVariant; index:
OleVariant)得到我们需要操作的Form,当然我们在这里得到的只是一个IDispatch接口,我们需要再把这个接口转换成
IHTMLFormElement来使用Form的方法和属性。示例如下(该例子为yahoo的免费信箱登陆界面http://mail.yahoo.com.cn):

var Form : IHTMLFormElement ;

D:IHTMLDocument2 ;

begin

with WebBrowser1 do begin

D := Document as IHTMLDocument2;

Form := D.Forms.item('login_form',0) as IHTMLFormElement;

(form.item('login',0) as IHTMLElement).setAttribute('value',edit1.Text,0);

(form.item('passwd',0) as IHTMLElement).setAttribute('value',edit2.Text,0);

//form.submit; // this line work too

(form.item('.save',0) as IHTMLElement).click;

end;

end;

从上面的例子我们可以看到我们可以通过两种方法提交一个Form,这两种方法在一般情况下没有什么区别,但是当页面中编写了一些js用来实现页面提交的控制时,前者会忽略掉这些js,所以后面的方法是我所推荐的。


这个时候我遇到了一个问题,就是在我要处理的页面中有两个Form,而且这样两个Form都没有名字,也就是说Form :=
D.Forms.item('login_form',0) as
IHTMLFormElement;这一句中item的第一个参数的我们无法从网页中得到,同时在设置这个参数时我发现了一个问题,就是说如果在页面中有
两个Form元素的话,第一个Form元素可以通过item(varEmpty,0)得到,第二个Form元素可以通过item(verNull,0)得
到,而item的第二个参数完全不起作用,这个问题可能是由于我对该函数的错误使用造成的,希望有人可以给出这一问题的解决方案(我在自己翻看帖子是找到了答案,的确是我对该函数的参数的错误使用造成的,第一个参数应该是我们要使用的对象的索引值。)。我的想法是DHTML在没有明确得到一个元素的名称时会自动生成一个唯一的元素名称分配给该元素,但是如何得到这个唯一的元素名称呢?这个只是我的一个设想,我们会看到,当我们处理链接的时候我们还要遇到这个问题。示例如下(

这是我自己做的一个jsp程序):

var form : IHTMLFormElement ;

d:IHTMLDocument2 ;

begin

with WebBrowser1 do begin

d := document as IHTMLDocument2;

form := d.forms.item(varNull,01) as IHTMLFormElement;

(form.item('firstName',0) as IHTMLElement).setAttribute('value',edit1.Text,0);

(form.item('lastName',0) as IHTMLElement).setAttribute('value',edit1.Text,0);

form.submit;

end;

end;

以上是网页中Form的基本处理,接下来我介绍一下网页中对于链接的控制,我们一般是希望能够实现程序自动点击网页中的连接。在这里正如前面提到的,我只能得到前两个没有名称的连接。示例如下:

var Links : IHTMLElementCollection;

D:IHTMLDocument2 ;

Element : IHTMLElement;

begin

with WebBrowser1 do begin

D := Document as IHTMLDocument2;

Links := D.links;

Element := (Links.Item(varempty,0) as IHTMLElement);

ShowMessage(Element.getAttribute('href',0));

Element := (Links.Item(varNull,0) as IHTMLElement);

ShowMessage(Element.getAttribute('href',0));

end;

end;

我们可以通过调用以上代码中的Element.Click事件来模拟点击。还有一个常见的问题就是怎么使自己写的Browser在打开一个新窗口时在制定窗口打开。这个要在TWebBrowser的NewWindows2中改变 ppDisp来实现。

Delphi - 直接访问WebBrowser控件中的html源码


实现在自己的程序中显示HTML文档,我们一般采用IE(Internet
Explorer本文中简称为IE)发行时附带的一个ActiveX控件TWebBrowser。这个控件使用和IE相同的内核,功能强大,并从
Delphi5开始,正式得到Inprise公司的支持,取代了原来的那个THTML控件,成为Delphi中显示HTML文档的首选控件。 />
是在实际编程过程中,我发现这个控件提供的功能有很多限制,比如对HTML文档的浏览,只能通过指定URL或文件名来实现,不能像以往使用THTML控件
那样直接读写HTML源码。因此如果程序动态生成了一段HTML文本,就必须把文本内容先写到一个临时文件,然后再将此文件的文件名传递给
WebBrowser控件,实现显示。走这一个弯路使程序响应速度受到很大影响,而且容易遗留下一些"垃圾"(临时文件)。 /> 其实,WebBrowser控件中的Document对象,这个对象提供了一个IPersistStreamInit接口,通过此接口,我们可以方便地实现对HTML源码的读写。

以下是IPersistStreamInit接口的相关定义及说明:

{ IPersistStream interface }

{$EXTERNALSYM IPersistStream}

IPersistStream = interface(IPersist)

['{00000109-0000-0000-C000-000000000046}']

function IsDirty: HResult; stdcall; />// 最后一次存盘后是否被修改

function Load(const stm: IStream): HResult; stdcall;

// 从流中载入

function Save(const stm: IStream;

fClearDirty: BOOL): HResult; stdcall;

// 保存到流

function GetSizeMax(out cbSize: Largeint):

HResult; stdcall; // 取得保存所需空间大小

end;

{ IPersistStreamInit interface }

{$EXTERNALSYM IPersistStreamInit}

IPersistStreamInit = interface(IPersistStream)

['{7FD52380-4E07-101B-AE2D-08002B2EC713}']

function InitNew: HResult; stdcall; // 初始化

end;

首先来实现写,因为这是最迫切的要求:

procedure SetHtml(const WebBrowser:

TWebBrowser; const Html: string);

var

Stream: IStream;

hHTMLText: HGLOBAL;

psi: IPersistStreamInit;

begin

if not Assigned(WebBrowser.Document) then Exit;

hHTMLText := GlobalAlloc(GPTR, Length(Html) + 1);

if 0 = hHTMLText then RaiseLastWin32Error;

CopyMemory(Pointer(hHTMLText),

PChar(Html), Length(Html));

OleCheck(CreateStreamOnHGlobal

(hHTMLText, True, Stream));

try

OleCheck(WebBrowser.Document.

QueryInterface(IPersistStreamInit, psi));

try

OleCheck(psi.InitNew);

OleCheck(psi.Load(Stream));

finally

psi := nil;

end;

finally

Stream := nil;

end;

end;


首先,此过程需要的两个参数,WebBrowser是显示目的控件,Html是需要显示的HTML源码;然后,先检查
WebBrowser.Document对象是否有效,无效则退出;接着在系统全局堆里分配一块内存,将需要显示的HTML源码复制进去。这是因为下一步
需要建立一个WebBrowser控件可以读取的流。GlobalAlloc函数的参数GPTR表示需要分配一块固定的以0初始化过的内存区域,如果分配
失败则返回0,则通过RaiseLastWin32Error函数引发一个异常,提示用户;然后用CreateStreamOnHGlobal函数建立一
个基于全局堆内存块的流,第二个参数如果为True则流在释放时自动释放所占全局堆内存。如果建立成功则此流和刚刚建立的内存块共用同一块内存区域。接着
用WebBrowser.Document.QueryInterface函数建立一个IPersistStreamInit接口。然后就可以直接使用此
接口,psi.InitNew初始化状态;psi.Load(Stream)从流中载入HTML源码。 /> 至此,以Html参数指定的HTML源码就在WebBrowser参数指定的控件中显示出来。 />
得注意的是,每个关于COM接口的函数调用,也就是那些返回类型为HResult的函数,都必须以OleCheck包装,因为一个不检查返回状态的COM
接口操作实在太危险了;此外接口的释放,虽然Delphi可以在后台自动完成,但作为一个好的编程习惯,还是应该显式地手工释放,释放只需将接口设为
nil即可。 />接着来实现HTML源码的读:

function GetHtml(const WebBrowser:

TWebBrowser): string;

const

BufSize = $10000;

var

Size: Int64;

Stream: IStream;

hHTMLText: HGLOBAL;

psi: IPersistStreamInit;

begin

if not Assigned(WebBrowser.Document) then Exit;

OleCheck(WebBrowser.Document.QueryInterface

(IPersistStreamInit, psi));

try

//OleCheck(psi.GetSizeMax(Size));

hHTMLText := GlobalAlloc(GPTR, BufSize);

if 0 = hHTMLText then RaiseLastWin32Error;

OleCheck(CreateStreamOnHGlobal(hHTMLText,

True, Stream));

try

OleCheck(psi.Save(Stream, False));

Size := StrLen(PChar(hHTMLText));

SetLength(Result, Size);

CopyMemory(PChar(Result), Pointer(hHTMLText),

Size);

finally

Stream := nil;

end;

finally

psi := nil;

end;

end;


此函数有一个参数WebBrowser指定从那个控件读取HTML源码,返回一个字符串为此控件中的HTML源码。首先还是要先检查
WebBrowser.Document对象是否有效,无效则退出;然后取得IPersistStreamInit接口;接着取得HTML源码的大小:本
来应该使用IPersistStreamInit接口的GetSizeMax函数,但在我的机器上测试,这个函数范围值衡为0,无效。因此只能先定义一个
足够大的缓冲区,如BufSize =
$10000字节(注意此缓冲区应该足够大);然后同样地分配全局堆内存块,建立流,然后将HTML文本写到流中。因为此HTML文本在流中是以#0结尾
的字符串,因此可以用Size := StrLen(PChar(hHTMLText))取得实际长度,用SetLength(Result,
Size);设置返回字符串长度为HTML源码实际长度,最后复制字符串到返回字符串中。 /> 至此,直接访问WebBrowser控件中的HTML源码所需的两个函数全部解析完毕。 /> 过需要注意的时,在使用这两个函数前,最好对WebBrowser.Document对象进行初始化。下面提供一个函数,通过显示一个空白页面实现WebBrowser.Document对象初始化。

procedure ShowBlankPage(WebBrowser:

TWebBrowser);

var

URL: OleVariant;

begin

URL := 'about:blank';

WebBrowser.Navigate2(URL);

end;

在你有WebBrowser控件的Form的FormCreate事件里调用此函数,初始化WebBrowser.Document对象。

Delphi - TWebBrowser的常见属性和方法







GoBack:方法,后退到上一个页面。

GoForward:方法,前进到下一个页面。

GoHome:方法,调用默认的主页页面,该页面在IE的选项中设定。

GoSearch:方法,调用默认的搜索页面,该页面在IE的选项中设定。

Refresh:方法,刷新当前页面。

Stop:方法,停止调用或打开当前页面。

LocationName:属性(WideString),当前位置的名称。

LocationURL:属性(WideString),当前位置的URL。

Busy: 属性(Boolean),是否正忙。

Visible: 属性(Boolean),浏览器窗口是否可见。

(以下属性为在TWebBrowser新增,

TWebBrowser_V1中没有,其作用有待探索)

StatusBar: 属性(Boolean),是否显示状态栏。

StatusText: 属性(WideString),状态栏内容。

ToolBar: 属性(SYSINT),工具栏中的内容。

MenuBar: 属性(Boolean),是否显示菜单条。

FullScreen: 属性(Boolean),是否全屏显示。

Offline: 属性(Boolean),是否脱机浏览。

AddressBar: 属性(Boolean),是否显示地址栏。

用Delphi打造自己的WEB服务器

使用indy的IdHTTPServer控件:(限于篇幅,部分内容省略)

unit Unit1;



interface

uses

...... ActiveX,IdBaseComponent, IdComponent, IdCustomTCPServer, IdCustomHTTPServer,IdHTTPServer,IdTCPServer,IdContext;

type

......

procedure Server1CommandGet(AContext: TIdContext;ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

procedure WebBrowser1NavigateComplete2(ASender: TObject;

const pDisp: IDispatch; var URL: OleVariant);

private

{ Private declarations }

protected

FHTMLDir: string;

FURL:string;

public

{ Public declarations }

end;



var

Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

server1.Active:=false;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

FHTMLDir:= ExtractFilePath(Application.ExeName) + 'WEBROOT';

FURL:='http://127.0.0.1:'+inttostr(server1.DefaultPort)+'/';

end;

procedure TForm1.Server1CommandGet(AContext: TIdContext;

ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

var

LFilename: string;

LPathname: string;

begin

LFilename := ARequestInfo.Document;

if LFilename = '/' then begin

LFilename := '/index.html';

end;

LPathname := FHTMLDir + LFilename;

if FileExists(LPathname) then begin

AResponseInfo.ContentStream := TFileStream.Create(LPathname, fmOpenRead + fmShareDenyWrite);

end else begin

AResponseInfo.ResponseNo := 404;

AResponseInfo.ContentText := 'The requested URL ' + ARequestInfo.Document+ ' was not found on this server.';

end;

end;

initialization

OleInitialize(nil);

finalization

try

OleUninitialize;

except

end;

end.

介绍查资料的几种方法



  1. 用全世界最大的图片库查图片。http://editorial.gettyimages.com/ 我刚刚查到一些有趣的图片。http://pic.donews.com/liuren


  2. 微软的百科全书Encarta。查资料。因为是英文的。所以,我主要也用它查图片。很多图片很经典。


  3. 人民日报 49到97年的数据库。人民日报作为中国官方的历史草稿,很有意义。


  4. 维基百科。用代理访问其中文版。现在已经很有参考价值了。


  5. 电影。用http://www.imdb.com/ 我在上面查到美国拍摄的7部反应朝鲜战争的电影。多集中在50年代。并不像我们想象的,美国没拍摄过这个题材的电影。我用emule下载过其中的一部。


  6. 对于,我们这些网络编辑而言,会查资料关乎我们的饭碗,你要是有一些查资料的新方式,不要忘记告诉我啊。

介绍 Vijos(Velocious Informatics Judge Online System)高效信息学在线评测系统

Vijos  (Velocious Informatics Judge Online System) 

高效信息学在线评测系统 http://www.vijos.cn/

Vijos 是一个基于Web网页形式的信息学评测系统,同时是一个集成 题库、测试、讨论 等主要功能的网络平台。



  Vijos 是一个具有"创新、探索、融合"精神的作品,它结合了广大 ACM Online Judge 和信息学竞赛评测程序的各种优秀功能,提炼出其中的精华,使之成为了一个以信息学奥林匹克竞赛(Olympic in Informatics)为基础,以广大的中学生信息学竞赛 学生、教师 、团队、学校 等为主体的在线评测系统。



  Vijos 是一个基于数据库信息存储的动态网页站点。网站以 ASP 为动态网页语言,并选择 VBScript 为语言环境开发,以 SQL Server 提供数据库支持,运行在 Windows Server 2003 的操作系统和 IIS 6.0 的信息服务管理系统上。



  Vijos 是一个以用户体制为基础和团队模式为辅助的健全平台。对于每一个注册用户,拥有对 题库、测试、讨论 等功能的权限。同时,Vijos 以5级管理层作为管理基础,拥有良好的后台管理系统和健全的日志功能。



  Vijos 是一个拥有良好操作和导航的网页程序,与普通 ACM/ICPC Judge Online 不同的是,Vijos 在具备对于题库中题目提交测试、发布、修改功能的同时,对于提交测试的用户记录下其提交原代码和评测信息;并且以信息学奥林匹克竞赛中数据点测试形式为基础,对于各个测试点给出评测信息和提示,并且以分数形式给出结果。在测试中,将与普通的竞赛一样的形式,给定开始和结束时间,并且进行统一评测。



  Vijos 是一个代码编写严格、文件结构规范的网页程序,具有良好的可读性和代码扩展性。同时以 Vijos Tester Service 评测服务 (VTS) 作为 Windows服务程序 为 Vijos 的评测过程进行稳定和高效的后台运行和控制。

   Vijos 是 Velocious Informatics Judge Online System 的简称,翻译成中文为"高效信息学在线评测系统"。此标题中的 Velocious 是一个极少见的英文单词,也正反映了 Vijos 的独特性和高效性。Vijos 以 Life Azure 为默认皮肤,采用海蓝色为主要背景色调;同时大胆使用白色背景板块模式构造网页结构,以各种明亮注目的色彩为文字染色。体现出稳重又不乏生机的青春活力。与此同时,Vijos 还设计了 Nature Vert / Vijos Black / Breezy Blue / Raniy Purple / Crazy Red 五种皮肤,各有其独特的风味



  Vijos 由 湖南师大附中附高0402班 刘康 (Vivian Snow) 设计、开发并维护,担任首席管理职责。站点制作期间,chp516 / xiaomengxian / Tsuzuki 等人为站点的建立及修改提供了大力帮助,在此对他们的支持与帮助表示由衷感谢。

  Vijos 信息限制使用条款 -- 网站上的所有材料均受版权保护,归 Vijos 所有。所有标志及名称均归 Vijos 专有。除非另有说明,本网站上的材料和服务仅用于个人和非商业用途,未经 Vijos 书面许可,不得修改、复制、分发、传递、显示、执行、重新制作、出版、许可、创建衍生作品、转让或出售从本网站获得的任何信息、文件、产品或服务。





  Vijos 隐私保护 -- Vijos 尊重您的隐私权利。当您向 Vijos 提供您的姓名(或别名)、电子邮件地址或QQ号码等, Vijos 可能使用所提供的信息来通知您更新信息、新服务和其它 Vijos 相关信息。 Vijos 不向第三方提供或销售任何用户提供的信息。使用本网站,表明您同意由 Vijos 处理您的数据,并同意本网站隐私保护策略的条款。



  Vijos 版权信息 -- Copyright Vijos 高效信息学在线评测系统 © 2005-2006. www.Vijos.cn Powered by Vivian Snow ,保留所有权利。

   Vijos 技术含量简介 -- 网站由 Macomedia Dreamweaver 8 / Macromedia Flash 8 Professional / Macromedia Fireworks 8 / Visual Studio 2005 .net / Adobe Photoshop CS 2 / Microsoft SQL Server 2000 等作为设计/开发工具进行网站的设计开发工作;由 FlashFXP 等作为数据传输工具进行网站的数据传输工作;由 Microsoft Windows Server 2003 / 2000 / NT / XP 等作为操作系统提供系统服务;由 Microsoft .NET Framework 2.0 提供服务框架;由 Microsoft SQL Server 2000 等作为后台数据库提供数据服务;由 Microsoft.Jet.OLEDB.4.0 提供OLE DB数据源连接服务;由 Microsoft Internet 信息服务(IIS)管理器 等作为信息服务管理工具提供信息服务。网站由 HTML / CSS / ASP ( VBScript ) / DHTML ( Javascirpt ) / XML 等设计开发语言进行网页程序设计。



  Vijos 服务器要求 -- 网站由 Microsoft Windows Server 2003 / 2000 / NT / XP 等作为操作系统提供系统服务;由 Microsoft .NET Framework 2.0 提供服务框架;由 Microsoft SQL Server 2000 等作为后台数据库提供数据服务;由 Microsoft Internet 信息服务(IIS)管理器 5.0及以上等作为信息服务管理工具提供信息服务。网站要求IIS自带组件 ADODB.Connection / ADODB.Recordset / ADODB.Stream / WScript.Shell / Scripting.Dictionary / Scripting.FileSystemObject 支持;网站要求 OLE DB Connection ( Microsoft OLE DB Prodiver for ODBC / Microsoft.Jet.OLEDB.4.0 ) 支持。

说管理的潜质

一,善于提倡议。

善于管理的人,往往有一个特质,那就是很多事情都是围绕他而展开的,或者说他的人缘很好。倡议的人多半也是该组织的领导,倡议可以提高大家的公共意识,增进组织内部人员的合作,倡议者,首要的要求就是他具有良好的交际能力。而作为倡议,我这里指的可以是一件很随意的事情,并不是完全意义上战略制定。或者是 FB,或者是某项公益事件都可以算得上是一个好的倡议。



二,正确的人才观。

曾经,也包括我们大学的讲堂,总是将司马迁《高祖本纪》中的一段话作为经典,大概是刘邦分析他与项羽楚汉相争胜负的原因:"搞国防预算,使得粮草畅通,我不如萧何;战略上的运筹帷幄,决胜千里,我不如张良;战必克,攻必果,我不如韩信。我有此三人能用,而项羽只有一个范增却不能用,所以我能战胜他。"这段话固然可以反映出一个成功管理的上的人才观,但是,我想这里很多人同时走入了另一个误区,那就是对人才的绝对信任。更有甚者提出了一个更加前瞻性的口号--21世纪是一个人才的世纪。呵呵,这里我不是要否认这句话,可是每当我看到了报纸上有关于统计哪个国家吸引了多少多少人才的时候,总觉得他们搞错了方向,而这样的例子,冲其量只能算做一个危机意识。应该在这里强调我个人观点的是--21世纪仍然是一个资本经济,仅仅是资本的形式发生了改变。我随便可以写XX万字来证明我的观点,用以反驳那些教授或者学者的言论,这里却没有必要。回到我上面的那句司马迁《史记》中的话,这里要说明的,其实这句话不仅仅是为了体现对人才的争取上,更加重要的是为了强调" 人尽其才"这个概念。



三,出色的个人能力。

我是学工商管理的,今年大四了就要毕业,我同寝室有一个大三的学弟跟我学的一个专业。他挂了很多科,因为他觉得他现在学的东西没有用。我很直接的告诉他:"我不知道你为什么会这样想,我去四家公司打过工,包括工程上的,销售上的,金融上的。我认为我们现在学的很有用,而且我认为我有很多没有学明白。"他只是给抛给我了一句话说:"你先去弄明白了广东浙江那边初中都没毕业的人,为什么最后却有很多都成为了亿万富翁再跟我说。"这里我不想对我们之间的谈论谁对谁错作出必要的强调,也不想讨论其他有关于机遇,后天努力而造就成功的案例。但是从他的话里,应该说我得到了一个信息,那就是"二三流"的老板,只要得到一流的员工就可以成就一番事业。我这里想讨论的,就是这个老板是不是"二三流"的问题。

我现在学了这么多财务上,管理上的概念和定式,我的命运,极有可能就是一辈子给一个可以给我丰厚报酬的老板打工,老板也许真的这些事情都不如我,甚至有的老板对财务,对经济上的无知令人不可思意。但是我需要指出的是,他能争取到一流的人才,他就不是二三流的老板。因为他所能体现他最大个人价值的地方,就在于他争取到了一流的人才,作为老板,他的个人能力是出色的。这正是通用电器的老板杰克 韦尔奇所成功的秘诀。

当然更需要说明的,如果作为老板有过人的专业知识可实际操作能力,他会更加令员工所拜服,包括老板此时在威信上的树立。至少我是这样看。



四,良好的个人品质。

我有一个很好的朋友,我们同乡在外地求学,他的专业刚好就是市场营销,有的时候,我会找他出来海阔天空的胡吹乱侃。他说他最欣赏的,是《康熙王朝》里的康熙,他说:"高明的管理就是一种让谁也瞧不出来的境界。"我说"那样的人城府太深,我很讨厌"。曾经上人力资源管理,我在上课的时候与我的老师发生了各执己见的情形,在一个人才选拔的问题上,我认为选拔人才应该公开,透明的根据事实说话,而我的老师则坚持说领导的个人意愿一定不能轻易传递给下属,呵呵。在我的观念里,对就是对,错就是错,即使我错了也没有什么,但是我要知道我为什么错了。我不喜欢黑白之间的灰色区域,我很年轻,我不想去做一些凌驾于他人的事情,我仅希望我能找到问题的根源,然后解决他就够了。老于事故的人可以说我很不成熟,但是我更加喜欢面对一个对人直率而友好的领导,而不是一个有着很深城府,给人很大压力,整天算计人的领导,我不能代表所有人,但是我相信我可以代表至少一部分人的观点吧。中古有句话说:"修身,齐家,治国,平天下。"为什么?因为良好的个人品质是每一个成功人士所应该首先具备的因素。



五,与下属交际的艺术。

我看了很多有关于对刚毕业大学生的管理态度的文章,有很多是很令人生厌的。一个个老气横秋的指使大学生没有经验,一幅挑剔的口吻。经验是什么?我要说的反例就是很多人干了一辈子的经验还是那个雄样,如果是一个新来的大学生,领导最正确的做法就是对其快速培训使他掌握该行业该领域的必要知识,然后找人带他完成工作。可是可悲的是,在中国的企业里很少有领导这样做,更有许多企业招聘的时候根本不招没有经验的应届生。好听的说这样叫务实,不好听的说其实是忽视了人才的忠诚度概念,看看中国企业高居不下的人才流动率就明白了。为什么像IBM,像华硕科技这些国际知名的大公司都对人才充分培养和储备,而我们国家仅仅"务实"的强调工作的经验呢?有一点我需要说明的是,应届生固然缺乏经验,但是他们却拥有一种比之经验更为可贵的精神,这个精神叫做热情或者理想,他是应届生得到工作以后更加努力学习的关键。

话题似乎有点偏,呵呵。接着说我,应该说我很幸运,因为我曾经工作的单位都与我有一定的个人联系,因此我有人带,有人教,学到了很多实际的应用知识。我叔伯有几位也都在商场上混迹了很多年,我有次在与我叔叔说到了我未来的工作问题时,他说像我现在这样的年轻人都是有棱有角的,真正的与人交往实际上更加圆滑很多。有句很有趣的对联说:"曲率半径处处相等,摩擦系数近似于零,横批又圆又滑。"说的就是与人交往当中所遵循的原则,我想我若体会这句话,恐怕还有待时日。我家里以我大伯在生意上走的最远,我妈对我说,我大伯让她最佩服的,就是每一次交谈结束后,不论是什么样的人,都会将他作为一个推心置腹的朋友来看待。好的领导是什么,好的管理又是什么,又有什么能比推心置腹这个概念更加令员工感念的?我有同学在沈阳国展中心给人做汽车临促,他说他最感动的就是培训前,公司董事对他们每一个人的一番悉心交谈。坛子上的朋友,假如你们也是老板,回想一下你们是怎么做的,如果你们是员工,想想你们的老板是怎么做的。



六,办事干脆果断。

先说明一点,办事果断而不卤莽,似乎是所有领导毕生所追求的最高目标。管理到了最高阶段就是决策,除了一定的专业与经验外,很多时候这样的决策更像是在赌博。这个工程接还是不接?接,我是不是会出先亏损,是不是滩了本钱要不来帐?不接,我还有什么其他更为稳妥的项目?以中国房地产为例子,一个很有趣的现象,就是做房地产的往往都不懂得房地产,就像切尔西的老板那个俄国佬不懂足球一样。我曾经为此跟一些做工程的人交换了一下意见。当时的那个工头对我说,真的懂盖房的人看了预算不敢盖,怕塌了,不懂的就什么也不管的盖房了,等到懂盖房的人回过了神,往往就错过了最佳时机。青岛啤酒总经理彭作义在收购时经常说的话是:"你不去抢,别人就去抢。""不是大的吃掉小的,而是快的吃掉慢的。"青啤在收购之初经营上曾出现了危机,但是后来通过成功的整合顺利完成了企业的转型和过度,应该在某种意义上说,当时彭作义的理论还是对的,他并没有失去了机会。所以说,决策的时候是否果断,往往决定了一个企业的发展。



七,拿的起,放的下。

过年的时候我去舅爷家拜年,遇到了我舅和我婶,于是不可避免的又谈到了我的就业问题,我舅问我今后想做什么,是玩"江湖",还是玩钱?我婶子就是我们当地一家金融公司的交易部经理,我舅则在当地自己办企业,用他的话,这就叫玩"江湖"。我舅是个完全连高中都没有念完的人,可是他现在的产业很大,他问我说:" 你是学管理的,你说说什么是管理。"我按照书上的定义大概说了一下我的观点,他然后说:"你说的对,但是这些我没学过,我告诉你管理是什么,管理就是今天你这么高,明天你这么高。"说话的同时,他用手比了两个不同的长度。明白话说出来,玩"江湖"的就是要拿的起放的下,今天你可以发迹了资产几百万,明天你就可能什么都没有,后来我单独跟我舅舅谈了一下,他在路上遇见了一个熟人,打完了招呼了跟我嘿嘿冷笑说:"你看见了他吗,他去青海修公路,玩没了几千万。 "管理到了最后,引一句话,就叫做"百足之虫,死而不僵"。

如何养成守时习惯

惰性和拖拖拉拉的习惯并不是一成不变的,你可以通过努力养成守时的好习惯,wikihow上介绍了如何养成守时习惯的方法:





1. 承认自己有不守时的毛病。如果你不承认,就不可能改掉。



2. 对时间敏感:



* 戴一块走时准确的手表。有人认为把时间调快可以帮助他们守时。实际上,如果你知道这个表不准,你只能和你的表一起不准。



* 在你的每一个房间里都放一个钟。没有提示的情况下很容易忘记时间。



* 校准你所有的钟和表。



* 不要太乐观。事情往往比你想想中花的时间多。预留出足够的提前量。







3. 该起床时就起床。不要使用闹钟的小睡功能,不要赖床,不要醒来第一件事就是看电视。不按时起床让一阵天都笼罩在不守时的阴影中。



4. 养成任何事都提前15分钟的习惯。



5. 带本随时可以读的书。如果来早了就拿出来读读。



6. 重新检查一下你的日常工作到底要花多长时间。不要老觉得你十五分钟就能洗完澡。



7. 注意一下自己最容易在什么事情上浪费时间。是上网还是看电视?



8. 记录一下在什么场合需要关注时间。比如给自己定一个早晨时间表。



9. 有条理。生活没条理最容易耽误时间。



10. 提前计划。



* 将重要的和不重要的事情岔开。如果四点有一个重要的会面,三点半可以安排一个不太重要的朋友小聚,这样就不会因为一件重要的事情而耽误另一件。



* 今天就准备好明天要穿的衣服。



* 如果要去不熟悉的地方,事先准备好地图。







11. 按时睡觉。这会让按时起床更容易。

应用敏特英语网络学习平台,培养学生英语综合应用能力----课题方案

研究背景


由英语教学、教育技术、教育管理等多学科专家依托北京凯迪晨光教育科技发展有限公司申报的
《应用敏特英语网络学习平台,培养学生英语综合应用能力》课题,是一项涉及认知科学、英语教学论和信息技术等多个领域的综合应用研究项目。本课题以认知科
学和外语(ESL /EFL)教学论为理论基础,构建基于网络的混合式学习模式(Blended Learning
Model)、学习路径(Learning Path)和学习平台,培养学生综合语言应用能力,切实提高中小学学生英语学习的有效性。


研究目标与研究内容


本课题的研究目标是以认知科学和外语教学论为理论基础,设计并开发混合式学习策略支持的、包括语言技能、语言知识和文化交际等模块的网络英
语学习平台,并通过大规模的学校实验,形成符合中国学生语言学习特点的学习模式和学习路径,促进学生综合语言应用能力的提高,提高学生英语学习的有效性。
研究内容包括第三代敏特网络英语学习平台的设计与开发;学习课程、模式、路径和评价的设计与开发和学校的实验研究。


研究方法和实施方案


1.认知科学和外语教学论的比较研究


基于脑科学的认知科学是一门新兴学科,本课题的研究目标和研究人员的专业基础决定了课题研究并不是开展这一领域的原创研究,而是跟踪这一领域的最新研究发
现,研究其在构建外语学习模式中的作用,为学习模式和学习路径提供理论基础。因此,本课题的比较研究重点是各种学习模式和学习路径的迁移条件研究,最终是
兼容并蓄,形成适应中国中小学生学习特点的学习模式和学习路径。


2.学校的实验研究


从课题自身特点出发,本课题开发的网络学习平台以及与此匹配的课程计划、课程单元、学习模式和学习路径是在课题进程中逐步形成、修正和完善的,更何况学校
的学情和教情千差万别,采用划一的横向对照实验本身的依据就不足。本课题实验研究属设计原型的纵向实验研究,一般不设对照,实验的重点与比较研究一样,是
学习模式和学习路径的迁移条件研究。实验的内容是?


• 基于本校学生特点的英语语言技能、语言能力和文化交际的学习模式和学习路径实验


• 基于网络的校际协同学习的实验


• 基于英语网络学习平台的校本课程的开发


• 英语教师专业发展模式和学习路径的实验


3.网络学习平台开发的技术路线


课题在开发的技术路线上将采用滚动式的开发策略。在研究的第一阶段,实验将以第二代网络学习平台及相应的课程计划、课程单元、学习模式和学习路径为基础,
在实验过程中根据学校的新需求和反馈信息修正和完善第三代网络学习平台的设计,用新模块不断充实第二代网络学习平台,最终在第二代网络学习平台上生成第三
代网络学习平台。


组织架构


本课题研究采用三层次的组织架构:


第一层次是由英语教学、教育技术、教育管理等多学科专业工作者组成的专家组?


蒋鸣和(组长):上海市教科院现代教育实验室主任、研究员、教育理论博士生导师


陈庆贵:中央电教馆研究室主任、研究员


孟雁君:北京市教委中小学英语教研室主任


王本忠:北京师范大学全国中小学计算机教育研究中心教育总监、教授


黄天元:中央电教馆研究室副主任、心理学博士


陈美玲:北京师范大学全国中小学计算机教育研究中心副主任


第二层次由北京凯迪晨光教育科技发展有限公司董事长林亚琳为首的有关开发研究人员组成。


第三层次由全国自愿参加课题实验的学校构成。


研究计划


本课题的研究周期为五年,分为三个阶段?


第一阶段( 2006-2007年)?第二代网络学习平台实验阶段。


第二阶段( 2008-2009年)?第三代网络学习平台实验阶段。


第三阶段( 2010年)?实验总结阶段。


形成下列研究的最终产出?


• 课题研究总报告?


• 第三代英语网络学习平台?


• 与英语课程标准匹配的基于网络和多媒体的英语学习课程计划和课程单元?


• 实验报告及实验课例。

2006-12-11

去掉NavBar

去掉NavBar

非常简单,只要在CSS中添加以下CSS即可

#navbar-iframe {

height:0px;

visibility:hidden;

display:none

}

如何合并多个Blogger帐号

相信不少人拥有不止一个Blogger帐号,这样给我们的管理带来了麻烦。如果你只是在不同的帐号里建了多个空Blog以占“位置”的话(鱼注册了不少哦),只要把帐号删了,再到主Blog里继续“占用”即可。如果你用不同的帐号写Blog,该如何迁到同一帐号下呢?


确定你的主帐号之后,到不同的帐号中把所有的Blog做如下设置Settings——》Permissions——》Add authors,添加主要的Blogger帐号并将权限设为Admin。
之后,你就可以到主帐号中去把各个Blog的其它帐号删掉了。