smiley's im dynamisches textfeld

ja ne bei den ersten versuchen sah es so aus als wenn er

:)
+
+
+
+
:)
+
+
+
+

macht aber ist ok nebeneinander gehen sie ja sowieso nicht :-/

Guckst du Link
 
da sind sie wieder meine drei Probleme :suspekt:

hab grade versucht die smiley funktion einzubauen. Das umwandeln funktioniert einwandfrei mein gedanke ist jetzt ein button der ein dragbares fenster öffnet mit den smiley als buttons die auf knopf druck in das eingabefeld schreibt wo sich der corser befindet. Das heisst er schreibt dann z.b :smile: in das textfeld und das script wandelt die zeichen dann um.

Problem 1: Durch das laden des fensters auf den smile button ist es nicht mehr drag bar :confused:

Problem 2: was muss ich schreiben das in der ebene der x button das fenster schliesst?

Problem 3: auf dem ersten Smiley hab ich die texteingabe funktion rein kopiert die eigentlich ein html code schreiben soll so wie der U button auf der hauptebene. wie bekomme ich das hin das der in das eingabefeld auf der hauptebene schreibt?

damit alle verstehen was ich meine hier die test fla
 
Hi,

1. fügst Du das Fenster nicht der Schaltfläche "Smiley" hinzu, sondern der Hauptzeitleiste.

Was soll die Flash-4-Syntax auf der Titelleiste:
Code:
startDrag("/fenster");
? Machs so:
Code:
on (press) {
	this._parent.startDrag();
}

on (release, releaseOutside) {
	this._parent.stopDrag();
}

2. Du legst doch mit der Smiley-Schaltfläche eine schöne Variable "attach" auf _root an, in der sich eine Referenz auf das Fenster befindet. Die lässt sich prima verwenden, um selbiges per X-Button zu entfernen:
Code:
on (release) { 
	_root.attach.removeMovieClip();
	_root.attach = 0;
}

3. Du musst vom Fenster aus natürlich die korrekten Pfade zu Deinem Textfeld angeben. Das wäre im Fall von
Code:
Selection.setFocus(msg_txt);
z.B.
Code:
Selection.setFocus(_root.msg_txt);
(genauso bei allen anderen Objekten dieses Codeblocks)

Schlauer wäre es allerdings, den Code zum Einfügen nicht auf jeden einzelnen Smiley zu setzen (wenn Du dann was ändern willst, müsstest Du den Code auf vielen Objekten ändern), sondern z.B. beim Klick auf einen Smiley nur eine (einmal existierende) Funktion auf _root aufzurufen, der Du eine Referenz auf den jeweiligen Smiley übergibst:
Code:
on (release) {
	_root.insertSmiley(":)");
}
Auf _root erstellst Du nun die Funktion "insertSmiley", die das Einfügen in das Textfeld übernimmt.

Gruß
.
 
boah du bist super!

funktioniert. Aller dings die insertSmiley funktion würde so einfach nicht hinhauen weil replaceSel('###'); bei jedem smile mehr oder weniger zeichen notwenig wären z.b wandel ich smiles mit zeichen wie :) oder :blumen: um. Das heisst ich hab da 4 zeichen differenz und dann haut das wieder mit der auswahl nicht hin.

danke erst mal :)
 
Ich verstehe nicht, was das Problem ist - Du kannst doch einen beliebig langen Text mit der aktuellen Auswahl ersetzen. Dein Code zum Ersetzen einer Auswahl macht für mich sowieso nicht viel Sinn (was soll z.B. help_mc._selA sein?), und ersetzt auch keine Auswahl, sondern den kompletten Inhalt des Textfeldes ...

Dein Problem ist eher, die Auswahl zu speichern, während Du das Smiley-Fenster öffnest. In diesem Thread (klick) habe ich einen Ansatz gepostet, der Dir dieses "Zwischenspeichern" erlaubt.

Gruß
.
 
ob das script so sinn macht kann ich nicht sagen ich hab das aus mehren tuts und mit hilfe von foren usern. Das ich das jetzt für die smiles umschreiben muss ist klar der rest funktioniert mag sein das es nicht elegant gelöst ist aber besser kann ich es nicht :(

ich ziehe mir mal deinen link rein..
 
so sieht jetzt mein script zum einfühgen von den smileys aus.

in der hauptleiste

Code:
msg_txt.onSetFocus = function() {
	if (help_mc == undefined) {
		// ort für ein onEnterFrame
		_root.createEmptyMovieClip("help_mc",this.getNextHighestDepth());
	}
	help_mc.onEnterFrame = function() {
		// selects retten, solange selectiert ist
		this._selA = Selection.getBeginIndex();
		this._selE = Selection.getEndIndex();
	};
};
msg_txt.onKillFocus = function() {
	delete help_mc.onEnterFrame;
};


der script liegt auf dem button.

Code:
on (release) {
	Selection.setFocus(msg_txt);
	Selection.setSelection(help_mc._selA, help_mc._selE);
	auswahl = msg_txt.text.substring(help_mc._selA, help_mc._selE);
	msg_txt.replaceSel(+auswahl+" :)");
}

selbst wenn man eine auswahl hat wird der smiley dahinter eingefügt.

edit: hm funktioniert aber nur wenn der smiley button auf der hauptebene ist *grummel*
 
Zuletzt bearbeitet:
Hi,

1. habe ich Dich schon darauf aufmerksam gemacht, dass Du von untergeordneten MovieClips aus die korrekten Pfade zu Deinem Textfeld (und anderen Objekten) angeben musst. In Deinem Fall liegen das Textfeld und der MC "help_mc" auf _:root.

2. Dürfte dies:
Code:
msg_txt.replaceSel(+auswahl+" :)");
aufgrund des ersten Pluszeichens syntaktisch falsch sein.

3. Solltest Du den Code wirklich auf eine globale Funktion auf der Hauptzeitleiste auslagern. Etwa in der Art:
Code:
function insertSmiley(sm) {
	Selection.setFocus(msg_txt);
	Selection.setSelection(help_mc._selA, help_mc._selE);
	var auswahl = msg_txt.text.substring(help_mc._selA, help_mc._selE);
	msg_txt.replaceSel(auswahl + sm);
}
Code:
// auf dem jeweiligen Smiley:
on(release) {
  _root.insertSmiley(":)");
}

Gruß
.
 

Neue Beiträge

Zurück