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
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
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
[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(
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
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
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
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.
cool, habs gerade mal ausprobiert!!
funzt super!!
DANKE!!
PS: jetzt noch den Cursor ändern.
MFG Veasel
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)
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