gui panel frage

Posted By: ratz

gui panel frage - 02/25/13 14:24

Hallo

ich sitze gerade an meiner GUI
und stelle folgendes fest:

erstelle ich ein "Fenster" mit der A-taste
kann ich es bewegen und auch schließen.. laugh

erstelle ich aber 2 fenster kann ich das eine weder
schließen noch bewegen , nur das was gerade "erstellt"
worden ist -> dannach geht nichts mehr

ich hab den code neu hochgezogen


Code:
siehe unten ...



ich weis nicht wo mein fehler liegt,
aber ich vermute dass es an
"hWnd_buffer[i_1]" liegt
das ist aber nur das leerpanel, für meine buttons

weis jemand was ich falsch mache , ohne mir gleich den
ganzen code zu zerflücken laugh

MfG: Ratz
Posted By: MasterQ32

Re: gui panel frage - 02/25/13 14:56

mach für deine fenster keine arrays
du kannst per mouse_panel rausfinden, auf welchem panel du grade bist
daher kannst du auch beliebig viele fenster machen, ohne dass du diese arrays benötigst.
wenn du weitere informationen über dein panel speichern willst, kannst du skill_x und skill_y verwenden (PANEL-Handles oder sonstiges)

wenn ich das richtig verstehe, verwendest du 2 panels für dein Fenster.
Gibt es dafür einen speziellen Grund oder einfach blos um Content und Fenster zu trennen?

hier der code für das panel-schließen ohne globals array:
Code:
function kill_hWnd_win_1()
{
 reset(mouse_panel, SHOW);
}

Posted By: ratz

Re: gui panel frage - 02/25/13 18:24

ja ich wollten nen kleinen hauch von Windows rein bringen
mit Fenster-rand ect.

nur das Problem ist jetzt wenn ich das einzelnt mache, dass
nur die buttons nach und nach verschwinden , jedoch nicht das Fenster frown

aber die mouse_panel function kannte ich noch nicht wink
Posted By: MasterQ32

Re: gui panel frage - 02/25/13 18:37

wenn du fensterrand und so haben möchtest, probier doch mal, dein hauptfenster als ein panel zu managen
und deine fenster features machst du in extra panel welche aber UNTOUCHABLE sind
damit hast du sozusagen immer das richtige panel und die featrues stören nicht

schreib dir am besten auch eine updateroutine für ein panelfenster, welches die ganzen features je nach zustand ein- oder ausblendet und sich beendet, wenn du das panel geschlossen hast (beispielsweise per skill_x != 0 oder == 0)
Posted By: ratz

Re: gui panel frage - 02/26/13 14:20

so ich habs jetzt folgendermaßen realisiert:

Code:
//////////////////////////////////////////
// Free GUI-EXAMPLE for all 3D gs use   //
//  written by Patrick Ratz             //
//////////////////////////////////////////

var i_1 = 0;
var i_2 = 0;
var i_3 = 0;

BMAP* arrow = "mouse_1.bmp";

BMAP* hWnd_win_2 = "hwnd_win_256.bmp";
BMAP* hWnd_win_3 = "hwnd_win_512.bmp";

BMAP* hWnd_but_1_up = "hWnd_but_1_up.bmp";
BMAP* hWnd_but_1_down = "hWnd_but_1_down.bmp";´

BMAP* hWnd_but_2_up = "hWnd_but_2_up.bmp";
BMAP* hWnd_but_2_down = "hWnd_but_2_down.bmp";

PANEL* hWnd_win_1_pan[100];



function start_gui();


function create_hWnd_win_1();

function move_hWnd_win_1();

function kill_hWnd_win_1();


////////////////////////////////////////////////


function move_hWnd_win_1()
{
  while(mouse_left == 1)
  {	
  mouse_panel.pos_x += mickey.x; 	
  mouse_panel.pos_y += mickey.y; 	
  wait(1);
  }
}


function kill_hWnd_win_1()
{
 reset(mouse_panel,SHOW);
}


/////////////////////////////////////////


function create_hWnd_win_1()
{ 
 hWnd_win_1_pan[i_1] = pan_create
 (
 "bmap = hWnd_win_2;
  pos_x = 100; 
  pos_y = 100;   
  button(234,6,hWnd_but_2_down,hWnd_but_2_up,hWnd_but_2_down,kill_hWnd_win_1,NULL,NULL);  
  button(218,6,hWnd_but_2_down,hWnd_but_2_up,hWnd_but_2_down,move_hWnd_win_1,NULL,NULL);  
  flags = SHOW | TRANSLUCENT ",10
 );
}


function start_gui()
{
 while(1)
 {
  if (key_a ==1)
  {	
   wait(-1); 
   i_1 += 1; 
   create_hWnd_win_1(); 	
  }
  wait(1);
 } 	
}

function main()
{
 start_gui();
 mouse_mode = 4; 
 mouse_map = arrow;
}



jetzt wird alles über ein panel gesteuert
- man kann alle fenster bewegen
- man kann alle fenster schließen
- und neue sertellen

nur ab und zu bekommt ich die fehlermeldung:

Error E1513
Script crash in move_hWnd_win1:

drücke ich auf okey laüft alles ohne probleme weiter
nur mich nervt diese dumme Fehlermeldung -> da ist doch kein fehler
... oder ?
Posted By: MasterQ32

Re: gui panel frage - 02/26/13 14:40

doch wink
mickey entspricht nicht der realen mausbewegung. wenn du deine maus zu schnell bewegst, hast du für ein paar frames einen invalid pointer (mouse_panel ist dann NULL weil die maus halt nicht mehr über dem panel ist)

verwende stattdessen die änderung von mouse_pos

also
Code:
if(mouse_panel)
{
mouse_panel.pos_x += mouse_pos.x - last_mouse_pos.x;
}

Posted By: Ayumi

Re: gui panel frage - 02/26/13 14:51

Schau doch mal, wo du deinen Mauszeiger definierst.
Posted By: ratz

Re: gui panel frage - 02/26/13 14:56

grin okey grin

gerade habe ich rausgefunden wofür
die Flag: UNTOUCHALBE steht:

erstellt man ein extra panel
Code:
PANEL* background = 
{
 bmap = "background.bmp";
 pos_x = 0;
 pos_y = 0;
 flags = SHOW | UNTOUCHABLE;
}



und setzt das flag nicht , so bewegt dieser sich auch mit

::::letzte frage::::

jetzt zur der move function:

binde ich mouse_pos.x und co ein flipt das fenster durch den screen

Code:
function move_hWnd_win_1()
{
 while(mouse_left)	
 {
  if(mouse_panel)
  {
   mouse_panel.pos_x += mouse_pos.x;	
   mouse_panel.pos_y += mouse_pos.y; 	
  } 
  wait(1);
 }
}

Posted By: Ayumi

Re: gui panel frage - 02/26/13 15:19

Wieso willst du du auf die Position des mouse_panel.pos noch die aktuelle Pos hinzufügen?
Nehm das + weg, dann sollte es funktionieren.
Posted By: Kartoffel

Re: gui panel frage - 02/26/13 15:29

Originally Posted By: Ayumi
Wieso willst du du auf die Position des mouse_panel.pos noch die aktuelle Pos hinzufügen?
Nehm das + weg, dann sollte es funktionieren.

Richtig gesehen wink
...aber trotzdem würde das Fenster beim Bewegen so springen, dass die linke obere Ecke auf der Mausposition ist.

@ratz
Meinen Post im letzten Thread hast du scheinbar nicht gesehen oder einfach ignoriert.
Posted By: ratz

Re: gui panel frage - 02/26/13 15:32

coooool laugh
alles functionniert so wie es soll laugh



DANKE
Posted By: Kartoffel

Re: gui panel frage - 02/26/13 15:42

Ich möchte noch ein 3. Mal darauf hinweisen, dass bei deinem code die relative Position zwischen
Fenster und Maus nicht berücksichtigt wird, das Fenster außerhalb des Engine-Fensters gezogen
werden kann und deine Funktion für lediglich ein Panel funktioniert, solange du nicht mit globalen
Pointern arbeitest, was man aber auch einfach vermeiden kann.
Posted By: ratz

Re: gui panel frage - 02/26/13 16:31

upps grin
ich habs 3 mal übersehn :D:D

Code:
function move_hWnd_win_1()
{
	var mouse_offset_x = mouse_panel.pos_x - mouse_pos.x;
	var mouse_offset_y = mouse_panel.pos_y - mouse_pos.y;
	
	while(mouse_left) // während die maustaste gehalten wird:
	{
		// panel auf maus-position + offset setzen
		mouse_panel.pos_x = mouse_pos.x + mouse_offset_x;
		mouse_panel.pos_y = mouse_pos.y + mouse_offset_y;
		
		// die panel-position auf den bildschirm begrenzen
		mouse_panel.pos_x = clamp(mouse_panel.pos_x, 0, screen_size.x - mouse_panel.size_x);
		mouse_panel.pos_y = clamp(mouse_panel.pos_y, 0, screen_size.y - mouse_panel.size_y);
		
		wait(1);
	}
}



sehr gut wink
Posted By: Kartoffel

Re: gui panel frage - 02/26/13 16:37

Wollte nur versuchen dir etwas Arbeit zu ersparen und dir helfen ne stabile Basis aufzubauen wink
© 2023 lite-C Forums