Создание кнопки копирования в буфер обмена

Content on this page requires a newer version of Adobe Flash Player.

Get Adobe Flash player

Информация
Автор/переводчик: 
ProcXel.A
Описание: 

Буфер обмена - это такая штука в операционной системе, которая необходима для временного хранения и передачи информации из одной программы в другую. В системе Windows, например, для работы с буфером обмена есть горячие клавиши. И Flash умеет обрабатывать нажатие этих горячих клавиш с помощью событий:

myObject.addEventListener(Event.COPY, onCopy);  
myObject.addEventListener(Event.CUT, onCut);  
myObject.addEventListener(Event.PASTE, onPaste);

Благодаря которым можно подшучивать над пользователями, желающими что-нибудь скопировать с вашего flash-сайта. Например, копирует пользователь с сайта рецепт вкусной пиццы, а вы ему подсовываете в буфер обмена секретную базу данных Пентагона и через минуту США закидывают ядерными бомбами страну вашего пользователя. Хм... Очень удобную штуку придумала компания Adobe.

Ах, да! Самое главное-то забыл. Записывать информацию в буфер обмена позволяет следующая строка кода:

System.setClipboard( str:String );

Всё просто!

А как только вам надоест мучить своих пользователей, с помощью возможности работы с буфером обмена вы сможете даже облегчать им жизнь. Например, создавать удобные кнопки для копирования полезной информации. Приступим к уроку.

1. Создайте новый *.fla файл с размерами 300 х 250.
2. Вставьте в первый кадр главного слоя (клавиша F9) следующий код:

import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.events.Event;
import flash.text.TextFormat;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.system.System;
 
//Это массив для движущихся текстовых полей.
var fields:Array = []
//Это наша строка, которую будем копировать в буфер обмена при нажатии на кнопку.
var myText:String = "Если хочешь скопировать этот текст, то нажми кнопку."
//Это спрайт, который будет своим появлением означать, что наша строка скопирована.
var done_spt:Sprite
 
//Слушатель обновления кадров.
this.addEventListener( Event.ENTER_FRAME, Update )
//Создание текстовых полей.
CreateFields()
//Создание кнопки.
CreateBtn()
 
//Функция создания текстовых полей.
function CreateFields():void {
	//Разделяем нашу строку на слова.
	var words:Array = myText.split( " " )
	//Переставляем задом-наперед. Даже не спрашивай! Так надо!
	words.reverse()
 
	//Создаем формат текстового поля.
	var tf:TextFormat = new TextFormat( "Arial", 30, 0, true )
 
	//Создаем текстовые поля из слов.
	for ( var i:int = 0; i < words.length; i++ ) {
		//Создаем новое текстовое поле.
		var txt:TextField = new TextField()
		//Добавляем его на сцену.
		this.addChild( txt )
		//Задаем формат.
		txt.defaultTextFormat = tf
		//Записываем в текстовое поле слово.
		txt.text = words[i]
		//Выравниваем размер текстового поля в зависимости от размера слова.
		txt.autoSize = TextFieldAutoSize.LEFT
		//Отключаем реакцию на мышь.
		txt.mouseEnabled = false
		//Позиционируем.
		txt.x = txt.y = 50
		//Помещаем в массив.
		fields.push( txt )
	}
}
 
//Функция создания кнопки.
function CreateBtn():void {
	//Создаем текст на кнопке.
	var txt:TextField = new TextField()
	txt.defaultTextFormat = new TextFormat( "Arial", 20, 0xffffff )
	txt.mouseEnabled = false
	txt.text = "Копировать"
	txt.autoSize = TextFieldAutoSize.LEFT
 
	//Создаем виды кнопки в положении "обычное", "наведено", "нажато".
	var upState:Sprite = new Sprite()
	upState.graphics.beginFill( 0x000000 )
	upState.graphics.drawRect( 0, 0, txt.width, txt.height )
 
	var overState:Sprite = new Sprite()
	overState.graphics.beginFill( 0x555555 )
	overState.graphics.drawRect( 0, 0, txt.width, txt.height )
 
	var downState:Sprite = new Sprite()
	downState.graphics.beginFill( 0xaaaaaa )
	downState.graphics.drawRect( 0, 0, txt.width, txt.height )
 
	//Создаем зеленый квадратик, который будет означать, что строка скопирована.
	done_spt = new Sprite()
	done_spt.graphics.beginFill( 0x00ff00 )
	done_spt.graphics.drawRect( 0, 0, txt.height, txt.height )
 
	//Создаем кнопку.
	var btn:SimpleButton = new SimpleButton( upState, overState, downState, downState )
	//Помещаем кнопку на сцену.
	this.addChild( btn )
	//Помещаем текст для кнопки на сцену поверх кнопки.
	this.addChild( txt )
	//Позиционируем текст, кнопку и квадратик на сцене.
	btn.x = txt.x = 50
	done_spt.x = btn.x + btn.width
	btn.y = txt.y = done_spt.y = 170
 
	//Назначаем слушатель на нажатие кнопки.
	btn.addEventListener( MouseEvent.CLICK, Click )
}
 
//Функция нажатия кнопки.
function Click( e:MouseEvent ):void {
	//Копируем нашу строку в буфер обмена.
	System.setClipboard( myText )
	//Показываем зеленый квадратик для красоты.
	this.addChild( done_spt )
}
 
//Функция анимации текста.
function Update( e:Event ):void {
	for ( var i:int = 0; i < fields.length; i++ ) {
		fields[i].y = 60 + Math.sin( getTimer() / 1000 + ( i * 2 * Math.PI / fields.length ) ) * 50
		fields[i].alpha = Math.sin( getTimer() / 1000 + ( i * 2 * Math.PI / fields.length ) - Math.PI / 2 ) / 2 + 0.5
	}
}

3. Протестируйте ролик.

Теперь при нажатии на кнопку крутящаяся стока копируется в буфер обмена. После чего вы можете ее вставить куда угодно. Например, откройте блокнот и нажмите Ctrl+V (Windows).

Конец.

Исходник: 

Впервые!

Если у вас было хоть раз желание сделать что-то новое и необычное, то этот видеокурс для вас! Знания ActionScript 3.0 вдохнут в ваши проекты новую жизнь, позволив тем самым поднять их на новый уровень

С помощью этого видеокурса вы пройдёте путь от новичка до Объектно-Ориентированного Программирования, сможете работать со многими популярными библиотеками и научитесь создавать сайты во flash! + Видеокурс по PaperVision3D в подарок!

Видеокурс содержит 119 видеоуроков в 12 главах. На сегодняшний день это единственный видеокурс, таких масштабов

Узнайте о других возможностях ActionScript 3.0

Комментарии

Аватар пользователя Sumbit

Спасибо, интересный урок.

Аватар пользователя taraa

прикольно., но не сработает если он будет копировать комбинациями клавиш,. хотя можно запретить выделения текста, и поставить кнопку, ))) ну никогда не нужно было такое,, но интересное дело)) можно упростить даже для себя много вещей. спасибо.

а хули...