Du bist nicht angemeldet.

1

14.08.2013, 18:32

Emulator - Popup [bessere Positionierung?]

Hi,

erstmal danke Flav für das Reversen. Man kann es jedoch verbessern, schaut mal in der Popup.java:

Quellcode

1
2
3
4
5
6
7
8
9
10
    	if (message != null) {
        	buffer.writeByte('C');
        	buffer.writeByte('c');
        	addString(buffer, message);
        	addFrameSize(buffer, width, height);
        	addForeground(buffer, new int[] { 0x00, 0x00, 0x00 });
        	addBackground(buffer, new int[] { 0xBE, 0xBC, 0xFB });
        	addBackgroundImage(buffer, "pics/cloudsblue.gif", 17);
        	buffer.writeByte(0xE3);
    	}


buffer.writeByte('C'); -> immer CENTER, kann man ja ändern in N (North) beispielsweise (Positionierung)
buffer.writeByte('c') -> das ist eine Komponente (TextPanelLight), Button ist ja z.B. 'b'.
addFrameSize(buffer, width, height); -> das ist die Größe vom TextPanelLight, hier wird die Größe des kompletten Fensters gesetzt.

Kennt ihr das /code-Fenster mit den ganzen Smileys in den CheckBoxen, die dann an den Server gesendet werden? Das kann man auch mit kcode-erzeugten (lol, was für ein Wort) TextFeldern machen. Beim TextPanelLight gibt es nämlich einen Parameter 't'. Mit sendback werden die Components zurückgesendet.

Ich hab das Ganze hier in C#, so sieht es bei mir aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
else if (type == ComponentType.TEXTPANELLIGHT)
                    	{
                        	TextPanelLight t = (TextPanelLight)component;

                        	AddBackgroundImage(buffer, "pics/cloudsblue.gif", 17);

                        	AddForeground(buffer, t.GetForeground());
                        	AddBackground(buffer, t.GetBackground());

                        	buffer.Append('n');

                        	AddFrameSize(buffer, t.Width, t.Height);

                        	if (t.SendBack)
                        	{
                            	buffer.Append('t');
                            	AddString(buffer, "sendback");
                        	}
                    	}


Und so sieht meine TextPanelLight-Klasse aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ChatServer.PopupUtil
{
	public class TextPanelLight : Component
	{
    	private String Content;
    	public bool SendBack { get; private set; }
    	public int Width { get; private set; }
    	public int Height { get; private set; }
    	public int[] Foreground { get; private set; }
    	public int[] Background { get; private set; }

    	public TextPanelLight(string content, bool sendback, int width, int height)
    	{
        	this.Content = content;
        	this.SendBack = sendback;
        	this.Width = width;
        	this.Height = height;
    	}

    	public new ComponentType GetType()
    	{
        	return ComponentType.TEXTPANELLIGHT;
    	}

    	public int[] GetForeground()
    	{
        	return new int[] { 0, 0, 0 };
    	}

    	public void SetForeground(int[] foreground)
    	{
        	this.Foreground = foreground;
    	}

    	public int[] GetBackground()
    	{
        	return new int[] { 255, 255, 255 };
    	}

    	public void SetBackground(int[] background)
    	{
        	this.Background = background;
    	}

    	public String GetText()
    	{
        	return this.Content;
    	}
	}
}


Das erstmal dazu.

Dann schauen wir mal in der Popup.java

Quellcode

1
2
3
4
5
6
7
8
9
10
    	for (Panel panel : panels) {
        	buffer.writeByte('S');

        	if (useBorderLayouts) {
            	borderLayouts++;
            	addLayout(buffer, 'B');
            	buffer.writeByte('N');
        	}

        	addLayout(buffer, 'F');


buffer.writeByte('S'); -> die Panels werden IMMER SÜDLICH positioniert, wie wäre es mit panel.getPosition() (default: 'S', kann man jedoch mit setPosition ändern), um die Panels anders anzuordnen...

Quellcode

1
2
3
4
5
6
7
        	if (useBorderLayouts) {
            	borderLayouts++;
            	addLayout(buffer, 'B');
            	buffer.writeByte('N');
        	}

        	addLayout(buffer, 'F');


Hier habe ich noch nicht rumgespielt, das ist euch überlassen.

Viel Spaß beim Ausprobieren.

Ähnliche Themen