Laden...

Form ohne Titel bewegen

Erstellt von KANU vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.313 Views
K
KANU Themenstarter:in
47 Beiträge seit 2007
vor 16 Jahren
Form ohne Titel bewegen

Hi Leute,

ich habe ein neues Projekt mit einer neuen Form angelegt. Dieser Form hab ich ein Background Image gegeben und dazu hab ich gesagt das ich als Hintergrundfarbe dieser Form rot haben möchte. So dann hab ich den Transparency Key auf rot gestellt um nur noch das Hintergrundbild anzuzeigen damit ich ein anderes Design habe. Weiters habe ich die Eigenschaft "FormBorderStyle" auf none gestellt um kein minimieren, schließen und maximieren habe. Das einfach wirklich nur mein bild angezeigt wird. Dieses Bild ist nun Vorlage für mein neues Design.

Als nächstes hab ich mir zwei Pictureboxen angelegt um die symbole Schließen und Minimieren mit meinen eigenen grafiken anzeigen zu lassen. Diesen Pictureboxen sag ich beim anklicken das sie das Fenster entweder minimieren oder schließen sollen. Das Funktioniert einwandfrei.

So das nächste Problem war das ich nach dem ich den Boarderstyle ausgeblendet habe, mir das verschieben meines eigenen Designes selber ausprogrammieren habe. Dies funktioniert auch einwandfrei.

Nur ein Problem hab ich und zwar wie programmier ich nun das "Fenster vergrößern" aus. Das heißt wenn ich einen Rand anklicke und ziehe das er mir das Fenster größer macht?????

Bitte helft mir ich, schon langsam bin ich am verzweifeln!

mit freundlichen grüßen Jennifer

W
558 Beiträge seit 2006
vor 16 Jahren

Original von KANU
Nur ein Problem hab ich und zwar wie programmier ich nun das "Fenster vergrößern" aus. Das heißt wenn ich einen Rand anklicke und ziehe das er mir das Fenster größer macht?????

Also Rand gibt es dann ja keinen mehr!
Du könntest halt auf das Click-Event auf der Form reagieren, überprüfen von wo der Click kommt (xy-Position) und dann this.Size ändern. Bzw. statt Click-Event MouseDown, MouseUp, evtl. MouseMove.

mfg
webstarg

V
327 Beiträge seit 2005
vor 16 Jahren

hallo,

also wenn ich darüber so nachdenke, dann musst du evtl. wenn der MouseButton grdrückt wird gucken, oder der mauszeiger am rand ist und wenn dann die form um die bewegung der maus in die richtung vergößern. das Backgroundimage kannst du doch so einstelllen, dass es sich automatisch vergrößert, autosize oder so...

wenn nicht, musst du dich darum auch noch kümmern...wegen verzerrungen und so.

ich guck mir das gerade mal an...dann poste ich auch code!

MfG

MFG Veasel

915 Beiträge seit 2006
vor 16 Jahren
   
[Flags]
public enum WindowsMessages
 {
   WM_SYSCOMMAND = 0x112
 }

[Flags]
public enum SystemCommands
 {

   SC_MINIMIZE = 0xF020,
   SC_MAXIMIZE = 0xF030,
   SC_CLOSE = 0xF060,
   SC_RESTORE = 0xF120,
 }


// für das implementieren der windows api erforderlicher namespace
using System.Runtime.InteropServices;

[DllImport("User32.dll", SetLastError = true)]
public static extern int SendMessage(IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam);

// in funktion für den close button
SendMessage(this.Handle, (int)WindowsMessages.WM_SYSCOMMAND, (IntPtr)SystemCommands.SC_CLOSE, IntPtr.Zero);

// in funktion für den minimieren button
SendMessage(this.Handle, (int)WindowsMessages.WM_SYSCOMMAND, (IntPtr)SystemCommands.SC_MINIMIZE, IntPtr.Zero);

// schreibe ne abfrage ob der status des formulars gerade maximiert ist oder nicht um evtl einen restore auszulösen ( kannst ja dabei auch die grafik des buttons ändern

int nSc = (WindowState == FormWindowState.Maximized) ? (int)SystemCommands.SC_RESTORE : (int)SystemCommands.SC_MAXIMIZE;

SendMessage(this.Handle, (int)WindowsMessages.WM_SYSCOMMAND, (IntPtr)nSc, IntPtr.Zero);


Die Moving Funktionalität kommt gleich, ich bin grade bei Naruto schauen 😉

/PS
Wenn es aber komplett richtig machen möchtest, schau dir diesen Artikel an: KlickMich

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

V
327 Beiträge seit 2005
vor 16 Jahren

so nochmal ich...

ich würd vielleicht ungefähr so machen.

		
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
	int xMin = (this.Right - this.Left) - 5;
	int xMax = (this.Right - this.Left) + 5;
	int xMouse = e.X;
	if (xMouse > xMin && xMouse < xMax)
	{
		//Hier nen Timer laufen lassen und solange der Button 
		//grdrückt die Größe der Form ändern!
		//das ganze dann noch für verschiebungen nach unten machen
        }
}

MFG Veasel

F
101 Beiträge seit 2007
vor 16 Jahren

Original von veasel
so nochmal ich...

ich würd vielleicht ungefähr so machen.

  	  
private void Form1_MouseDown(object sender, MouseEventArgs e)  
{  
  int xMin = (this.Right - this.Left) - 5;  
  int xMax = (this.Right - this.Left) + 5;  
  int xMouse = e.X;  
  if (xMouse > xMin && xMouse < xMax)  
  {  
  	//Hier nen Timer laufen lassen und solange der Button   
  	//grdrückt die Größe der Form ändern!  
  	//das ganze dann noch für verschiebungen nach unten machen  
        }  
}  

Timer ?!? oO eher net so...
erstell dir ne global bool vaiable (standart = false), bei

private void Form1_MouseDown(object sender, MouseEventArgs e)

machste die variable auf true, so kannste dann z.B. bei

private void Form1_MouseMove(object sender, MouseEventArgs e){
     if(resizing){ //resizing ist die globale variable
          //do smthg
     }
}

so würd ich es machn 😜

ahja.. net vergessen bei "Form1_MouseUp" die variable wida auf false zu setzen.
cu

V
327 Beiträge seit 2005
vor 16 Jahren

das geht natürlich auch!!
ich hoffe mal das zungeaustrecken geht NICHT gegen mich!!!

ist nämlich nicht nett!!!!
gar nicht nett!!!

außerdem würde ich eine mischung aus beidem machen!!
denn es soll ja nur vergrößert werden wenn der cursor am rand der form ist!!


//global
bool resizing = false;

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
	rezising = true;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
	int xMin = (this.Right - this.Left) - 5;
	int xMax = (this.Right - this.Left) + 5;
	int yMin = (this.Bottom - this.Top) - 5;
	int yMax = (this.Bottom - this.Top) + 5;
	int xMouse = e.X;
	int yMouse = e.Y;
	if (resizing &&  (yMouse > yMin && yMouse < yMax))
	{ 
		//Vergrößerung in Y-Richtung
		this.Height = MousePosition.Y - this.Location.Y;
	}
	
	if (resizing && (xMouse > xMin && xMouse < xMax))
	{
		//Vergrößern in X-Richtung
		this.Width = MousePosition.X - this.Location.X;
	}
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
	rezising = false;
}

die Verschiebung ist nur so eine Idee, funktioniert aber nur wenn man die Maus langsam bewegt. da muss man noch dran arbeiten!!

MFG Veasel

1.130 Beiträge seit 2007
vor 16 Jahren

Ich hatte das zufällig in detr neuesten Version von VPT. Ich hab das ganze in ein seperates Projekt kopiert. Den Code muss man natürlich noch anpassen.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

V
327 Beiträge seit 2005
vor 16 Jahren

cool, habs gerade mal ausprobiert!!

funzt super!!

DANKE!!

PS: jetzt noch den Cursor ändern.

MFG Veasel

1.130 Beiträge seit 2007
vor 16 Jahren

Zum Cursor:
Das ist der code den du dafür nehmen solltest:


MovingState nms = MovingState.none;
            if (e.X > Width - 5) nms |= MovingState.sizeRight;
            if (e.Y > Height - 5) nms |= MovingState.sizeBottom;
            if (e.X <5) nms |= MovingState.sizeLeft;
            if (e.Y < 5) nms |= MovingState.sizeTop;
            if (nms == MovingState.none) nms = MovingState.offset;

Das Ergebnis musst du dannn noch auswerten. Wenn du den Code nicht verstehst guck dir Flaks an.
Tip:
Edit: var ==(MovingState.xxy | MovingState.xxz)

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

K
KANU Themenstarter:in
47 Beiträge seit 2007
vor 16 Jahren

Danke vielmals Leute,

es war sehr hilfreich für mich und hat auch super hingehaun!!! Wirklich einen großen DANK und ein kräftiges Lob an euch.

Das einzige was ich nicht wirklich verstanden hab war das mit dem Cursor. Da hab ich nicht ganz durchgeblickt.

Liebe Grüße Jennifer