Laden...
H
hauptmann myCSharp.de - Member
Schüler Österreich/Kärnten Dabei seit 19.07.2003 704 Beiträge
Benutzerbeschreibung

Forenbeiträge von hauptmann Ingesamt 704 Beiträge

02.05.2006 - 17:03 Uhr

Lass dir doch die Bounding Box und den Intersect Ray mal anzeigen ... dann siehst du genau wo die Bounding Box gelegt wird.
Die Koordinaten der Bounding Box bei Geometry.BoxBoundProbe sehen so aus:

xmax, ymax, zmax
xmax, ymax, zmin
xmax, ymin, zmax
xmax, ymin, zmin
xmin, ymax, zmax
xmin, ymax, zmin
xmin, ymin, zmax
xmin, ymin, zmin

(Jede Zeile ist ein Vertex. Die einzelnen Koordinaten kommen aus den Vektoren min und max die du übergeben musst)

02.05.2006 - 13:52 Uhr

SharpPrivacy kannst du einfach von SourceForge ziehen: http://sourceforge.net/projects/sharpprivacy

02.05.2006 - 13:46 Uhr

Original von herbivore
Hallo SimonKnight6600,

wenn ich mich richtig entsinne werden längere Windows-Passworte in Gruppen zu sieben Buchstaben gespeichert, die sich einzeln knacken lassen. Weiß nicht, ob das durch XP oder ein ServicePack behoben wurde. Aber dadurch konnte man auch Passworte in Maximallänge in sehr kurzer Zeit knacken.

herbivore

LANMan Hashes sind das. Nicht nur das das Password als 7-Byte-Chunks gespeichert wurden, der Hash ist auch Case-Insensitive(Der Hash wird als Uppercase des Passwortes berechnet). Windows XP verwendet dern NT-Hash Algrorithmus der diese beiden Schwächen beseitigt.

@SimonKnight6600: How to prevent Windows from storing a LAN manager hash of your password in Active Directory and local SAM databases

02.05.2006 - 13:27 Uhr

Caste das ganze einfach.

double d = 29.6699999998;
Console.WriteLine((float)d);

Wenn du das float weglässt kommt 29.6699999998 heraus, wenn du im WriteLine auf float castet dann gibt er 29.67 aus. Das Problem liegt darin, das 29.6699999998... eine nicht endliche Dezimalzahl ist.

Dann noc hetwas, wie kann ich überprüfen, das die Zahl 2 Nachkommastellen hat?

Wenn ich z.B. eine Zahl habe die Glatt ist, also 780 dann soll automatishc ein ,- angefügt werden. wenn die Zahl nur eine Nachkommastelle hat z.B. 780,9 soll automatisch ne 0 angefügt werden..

Wie ist das am einfachsten möglich?

Zuerst ermittelst du die Nachkommastellen:

static int GetDecimalPlace(float n)
{
	string s = n.ToString();
	int i;
	for(i=s.IndexOf(',');i<s.Length;i++);
	return i-s.IndexOf(',')-1;
}

Und den Rest musst du dann entsprechend formatieren. Je nachdem wie du das ganze dann speichern/ausgeben willst bieten sich hier dann noch Strings an. (oder man kann es auch direkt im WriteLine machen mit Formatspezifizierern)

02.05.2006 - 13:09 Uhr

Das ganze geht mit der mpglib.dll. Das beste daran ist das diese lib unter der LPGL steht: http://www.mpesch3.de/
Entweder du ladest das dann per Reflection oder portierst es auf C#. Das Laden von mp3 Dateien ist leider nicht ganz trivial -.- (nicht so wie bei wav dateien die man einfach mit Binary Reads/Writes cutten kann)

01.05.2006 - 22:24 Uhr

_Original von norman_timo_Sind denn die X-Files überhaupt schon offengelegt?

In der Dokumentation des DirectX SDKs gibt es eine X-File Format Reference, im Fall das man sich selbst einen Loader schreiben will.

01.05.2006 - 16:29 Uhr

Zu den VertexStreams:
Also du brauchst erstmal zB 2 gültige Vertexbuffer. Danach setzt du du SetStreamSource(0,vertexBuffer,0) und SetStreamSource(1,vertexBuffer2,0); und renderst.
Hab das ganze grad ausprobiert und funktioniert. Achja, irgendwie funktioniert das bei mir nicht verschiedene Objekte zu rendern. Es funktioniert nur in Stream 0 die Vertices zu legen und dann in Stream 1 die Farben/Texturen.

Zur Textur:
Kann es sein das manchmal u und v nicht innerhalb von [0.0f;1.0f] liegen? Überprüf das mal bei den Objekten mit einem schwarzen Rand.

01.05.2006 - 15:48 Uhr

** Textur Transformationen **

Nach etwas längere Pause werde ich mich nun wieder diesem Tutorial hier zuwenden. Ich werde versuchen es jetzt regelmäßig zu erweitern. Ich will nicht großartige Programme hier vorstellen sondern einfach in kurzen und überschaubaren Programmen verschiedene Techniken vorstellen.
Das nächste Kapitel hier ist eher kurz aber es handelt von einem sehr interessanten und nützlichen Thema: Texturtransformationen.
Wie wir wissen durchlaufen ja unsere Vertices eine Transformationspipeline. In dieser Pipeline können wir Matritzen setzen um diese Vertices zu transformieren. Direct3D bietet uns jetzt jedoch die Möglichkeit auch Texturkoordinaten zu transformieren. Damit können wir jetzt alle Transformationen, die wir bei Vertices anwenden konnten auch bei Texturen anwenden. Ein Anwendung für eine solche Transformation ist zB ein sich bewegendes Hintergrundbild. Wenn man sich zB das Spiel Moorhuhn ansieht dann erkennt man das der Hintergrund sich beweget, er scrollt. Anstatt nun kompliziert mehrere Primitive zu zeichnen, diese entsprechend anzuzeigen und zu transformieren könnten wir ja einfach ein Rechteck zeichnen, auf dieses eine riesige Hintergrundtextur zeichnen und diese Texture dann entsprechend den Usereingaben nach links oder rechts zu verschieben. Eine weitere Anwendung wären Himmeltexturen. Wolken sind ja nicht statisch sondern bewegen sich. Mit Texturkoordinatentransformation können wir nun die Wolken bewegen. Aber dazu in einem späteren Tutorial mehr, da dies bereits zum Thema Skybox gehört.

Kommen wir jetzt zum Spaß der ganzen Sache und gehen direkt in den Code.
Das Beispielprogramm soll einfach ein texturiertes Rechteck anzeigen auf dem die Textur ständig scrollt. Ich zeige außerdem beide Varianten auf, wie man die Texturkoordinaten transformieren kann: Entweder man verwendet die Texturkoordinatentransformation von Direct3D oder man passt die Texturkoordinaten jeden Frame selber an.
Eine Anmerkung noch: Ich verwende hier User Primitives (dh die Vertices liegen im RAM und werden bei jedem Frame zur Grafikkarte geschickt). In Spielen oder Grafikdemos sollte man immer einen Vertexbuffer verwenden. Ich verwende hier einfach User Primitives weil es einfacher ist als zuvor einen Vertexbuffer zu erstellen usw.

Zunächst brauchen wir 3 neue Variablen:

float	counter;
bool	useTransformation = true;
Texture texture;

counter speichert unseren aktuellen Translationswert.(dh um den Wert der in counter steht wird später unsere Textur verschoben). useTransformation zeigt an ob die Anwendungen den Hintergrund mit der Texturkoordinatentransformation rendern soll oder ob es die Texturkoordinaten selbst anpassen soll. Und texture schließlich speichert unsere Hintergrundtextur.

Als nächstes kommt der übliche Direct3D Code. Present Parameter, CreateDevice usw.
Das einzig noch interessante hier ist das Laden der Textur:

texture = TextureLoader.FromFile(device,"cloud3.bmp");

cloud3.bmp ist eine Hintergrundtextur aus dem DirectX 8 SDK und ist eine einfache Wolkentextur.

Kommen wir jetzt direkt zur Renderfunktion. Die ersten paar Zeilen beinhalten nichts neues:

		private void Render()
		{
			if (device == null) 
				return;

			device.Clear(ClearFlags.Target , System.Drawing.Color.Black, 1.0f, 0);
			
			device.BeginScene();
			device.Transform.World = Matrix.Identity;
		        device.Transform.View = Matrix.LookAtLH ( new Vector3 ( 0, 0, 5f ), new Vector3 ( 0, 0, 0 ), new Vector3 ( 0, 1, 0 ) );
			device.Transform.Projection = Matrix.PerspectiveFovLH ( (float)Math.PI / 4, this.Width / this.Height, 1.0f, 100.0f );
	

Jetzt kommen wir zum eigentlich Rendercode. Zunächst setzen wir ein Vertexformat und eine Textur. Dann kommt als erstes etwas neues:

device.VertexFormat = CustomVertex.PositionTextured.Format;
device.SetTexture(0,texture);
device.SamplerState[0].AddressU = TextureAddress.Wrap;

device.SamplerState[0].AddressU = TextureAddress.Wrap; Und zwar Samplerstates. Samplerstates definieren wie eine Textur gesampelt wird also quasi abgetastet. Aber sehen wir uns erstmal an was diese Anweisung bedeutet. Texturkoordinaten sind immer als ein uv-Koordinatenpaar angegeben. Mithilfe dieser Koordinaten können wir bestimmen wie eine Textur auf ein Primitiv gemappt wird. (-> Textur Mapping). Wie wir wissen ist das Verhalten der Texturkoordinaten nur im Intervall [0.0f;1.0f] definiert. Wenn Texturkoordinaten außerhalb dieses Bereichs sind müssen wir Direct3D sagen was es mit den Koordinaten anstellen sollen. Und das tun wir hier. Mit Wrap sagen wir das Direct3D die Textur einfach wiederholen soll. Hätten wir jetzt als u-Koordinaten die den Intervall [0.0f;5.0f] einspannen wird die Textur 5x wiederholt. Es gibt noch TextureAddress.Mirror, die im Prinzip dasselbe wie Wrap ist, aber die Textur wird zusätzlich noch gespiegelt. Es gibt daneben noch Clamp, MirrorOnce und Border.

Jetzt beginnt das zeichnen: Zunächst überprüfen wir ob wir Texturkoordinatentransformation verwenden oder ob wir die Texturkoordinaten selbst berechnen. Ich bespreche erstmal die Koordinatentransformation.

if(useTransformation)
{
				device.TextureState[0].TextureTransform = TextureTransform.Count2;
				
				Matrix m = Matrix.Identity;
				m.M31 = counter;
				device.Transform.Texture0 = m;
				
				device.DrawUserPrimitives(PrimitiveType.TriangleStrip,2,CreateQuad());
				device.TextureState[0].TextureTransform = TextureTransform.Disable;
}

Die erste Zeile schaltet erstmal die Texturkoordinatentransformation ein. Daneben bestimmen wir gleichzeitig wieviele Texturkoordinaten wir Direct3D zur Verfügung stellen. In unserem Beispiel sind das 2D-Koordinaten. (Es gibt 1D,2D,3D und 4D und noch Projected, bei dem wir Texturkoordinaten ähnlich dem Pixelprojektion projezieren können)
Nun kommen wir mathematischen Teil dieses Tutorials. Aber keine Angst, es nicht schwer und selbst wenn man es nicht verstehe, man muss nur wissen wie man es richtig anwendet. m ist unsere Translationsmatrix für die Textur. Mit Hilfe dieser werden wir verschieben wir die Texturkoordinaten in u- und v-Richtung. Die Matrix die wir Direct3D schicken muss diese Form haben:

1 0 0 0
0 1 0 0
(delta)u (delta)v 1 0
0 0 0 1

Wie man mehr oder weniger leicht erkennen kann ist diese Matrix einfach eine Identitätsmatrix wobei aber die 31. und 32. Postion durch 2 Werte ersetzt werden. Diese beiden Werte, (delta)u und (delta)v bestimmen die Translation entlang der entsprechenden Koordinatenachse. In unserem Beispiel wollen wir die Textur nur entlang der u-Richtung verschieben (dh nach links/rechts). Würden wir m.M31 durch m.M32 ersetzen würden wir nicht mehr nach links/rechts verschieben sondern in der v-Richtung dh oben/unten. Wer aber jetzt aufgepasst hat der wundert sich warum die delta werte in der 3. und nicht in der 4. Zeile sind. Normalerweise sind ja bei einer Translationsmatrix diese Werte in der 4. Zeile. Aber: Wir haben ja keine 3D-Raum. Unsere Textur liegt im 2D-Raum daher müssen wir auch eine 2D-Translationsmatrix anfertigen. (Was zunächst mal eine 3x3 Matrix ist), aber Direct3D eine 4x4 Matrix für alle seine Operationen verlangt müssen wir noch die 4. Zeile hinzufügen. Dh wir haben hier einfach eine 3x3 2D-Translationsmatrix die einfach nicht als 3x3 angeschrieben wird sondern als 4x4. Zu beachten ist das wir auch in der 4. Zeile noch eine 1 als letztes Element hinschreiben müssen um die Identitätsmatrix nicht zu beschädigen. Das ganze muss übrigens auch ein Zeilenvektor sein, da Direct3D mit diesen arbeitet. Im Gegensatz dazu arbeitet OpenGL etwa nur mit Spaltenvektoren. Aber das nur nebenbei und tut hier eigentlich nichts zu Sache.
Soviel dazu. Eigentlich nicht schwer. Als nächstes setzten wir noch die Matrix, ähnlich wie zB die World Matrix. Man kann für jede Texturstufe eine Matrix setzen und somit diese Transformation auch verwenden wenn man Multitexturing verwendet.

Nun zum Zeichnen. Ebenfalls nichts aufregendes bis auf die Funktion CreateQuad. Diese Funktion liefert uns einfach 4 Vertices mit Texturkoordinaten zurück.

private CustomVertex.PositionTextured[] CreateQuad()
{
CustomVertex.PositionTextured[] verts = new CustomVertex.PositionTextured[4];
			
verts[0].Position = new Vector3 ( -1.0f,-1.0f, 3.0f ); verts[0].Tu =1.0f; verts[0].Tv = 1.0f;
verts[1].Position = new Vector3 ( -1.0f, 1.0f, 3.0f ); verts[1].Tu =1.0f; verts[1].Tv = 0.0f;
verts[2].Position = new Vector3 ( 1.0f, -1.0f, 3.0f ); verts[2].Tu =0.0f; verts[2].Tv = 1.0f;
verts[3].Position = new Vector3 ( 1.0f,  1.0f, 3.0f ); verts[3].Tu =0.0f; verts[3].Tv = 0.0f;

return verts;
}

Danach schalten wir noch die Texturkoordinatentransformation aus. Dies ist wichtig falls wir noch weitere texturierte Objekte zeichnen würden, da ja die Transformationsmatrix auf jede Textur angewendet werden würde.

Jetzt kommen wir noch zu dem Teil der Anwendung die ohne die von Direct3D bereitgestellte Funktionalität arbeitet. Wir berechnen uns unsere Texturkoordinaten einfach selbst. Und das ist einfacher als es sich anhört. Zurück in der Renderfunktion sieht das erstmal so aus:

else			device.DrawUserPrimitives(PrimitiveType.TriangleStrip,2,CreateTransformedQuad());

Wie man vermuten kann spielt sich wohl alles in CreateTransformedQuad ab. Diese Funktion ist dasselbe wie CreateQuad, nur mit dem Unterschied das diesmal die Texturkoordinaten nicht statisch sind, sondern wir diese in der Funktion berechnen (daher auch Transformed).

private CustomVertex.PositionTextured[] CreateTransformedQuad()
{
	CustomVertex.PositionTextured[] verts = new CustomVertex.PositionTextured[4];
			
			verts[0].Position = new Vector3 ( -1.0f,-1.0f, 3.0f ); verts[0].Tu =0-counter; verts[0].Tv = 1.0f;
			verts[1].Position = new Vector3 ( -1.0f, 1.0f, 3.0f ); verts[1].Tu =0-counter; verts[1].Tv = 0.0f;
			verts[2].Position = new Vector3 ( 1.0f, -1.0f, 3.0f ); verts[2].Tu =1-counter; verts[2].Tv = 1.0f;
			verts[3].Position = new Vector3 ( 1.0f,  1.0f, 3.0f ); verts[3].Tu =1-counter; verts[3].Tv = 0.0f;

			return verts;
}

Besondere Aufmerksamkeit lenken wir auf die Zeilen mit den u-Koordinaten. Hier berechnen wir einfach die Koordinaten und verschieben so die Textur entlang der u-Achse.
Nun aber wieder zurück in die Renderfunktion:


counter += 0.0015f;

			this.Text = "MDXTutoria12: Texturkoordinatentransformation"  + "- useTransformation = " + useTransformation.ToString();
			
			device.EndScene();
			device.Present();
}

Zunächst erhöhen wir hier counter damit es auch eine Bewegung gibt. Hier ist es aber zu beachten das man das in Spielen oder Demos nicht so machen sollte. Das Problem ist einfach das counter auf langsamen Rechnern langsamer erhöht wird und auf schnelleren Rechnern eben schneller. Wir müssen die Erhöhung von der Framerate abhängig machen, aber das zeige ich in einem anderen Tutorial.
Danach zeigen wir in der Fensterleiste noch an wie die Szene derzeit gerendert wird und schließlich beenden wir die Szene und rendern sie endgültig.

Nun haben wir alles, bis auf die ProcessCmdKey. Hier verarbeiten wir Benutzereingaben:


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
	if(keyData == Keys.Escape)
		Application.Exit();
	if(keyData == Keys.T)
		useTransformation = !useTransformation;

	return base.ProcessCmdKey( ref msg, keyData );
}

Nichts schweres an dem Code. Wenn der User auf die Taste t drückt dann schaltet die Anwendung zwischen den Transformationen hin und her.

Und das war es auch schon. Wie ich versprochen habe, nicht allzu schwer dieses Tutorial, aber doch lassen sich damit coole Effekte machen. (Ungefähr wie beim Alphablending). Noch etwas: Man sollte in einer produktiven Anwendung immer Texturkoordinatentransformation verwenden außer es geht irgendwie nicht. Die Texturkoordinatentransformation spielt sich nämlich normalerweise direkt auf der Hardware ab und ist dadurch viel schneller. Ein weitere Vorteil ist außerdem das wir damit die Koordinaten nicht ständig verändern müssen. Hier kommt das nicht so gut raus da ich User Primitives verwende, aber stellen wir uns vor, wir würden einen Vertexbuffer verwenden. Wir müssen dann in jedem Frame den Vertexbuffer sperren, u-Koordinaten auslesen und verändern und wieder zurückschreiben. Das verlangsamt natürlich für die Performanz der Anwendung sehr zuträglich.
Falls es Unklarheiten gibt fragt einfach im Forum hier nach. Ebenfalls immer willkommen ist Kritik. Falls ich etwas falsch erklärt habe oder Fehler gemacht habe könnt ihr mich gerne aufmerksam machen. Ich schreibe in diese Tutorials einfach wie ich bestimmte Effekte erziele. Wie immer gibt es das ganze Tutorial als Visual Studio .net 2003 Projekt als zip Datei im Anhang.

01.05.2006 - 09:45 Uhr

Im DirectX SDK sind auch viele x-Files enthalten ...
<SDKROOT>\Samples\Media

01.05.2006 - 09:42 Uhr

Es gibt mehrere Möglichkeiten. Die einfachste ist es das ganze einfach Direct3D für dich übernehmen zu lassen.
Dazu verwendest du die Klasse Microsoft.DirectX.Direct3D.ClipPlane.

01.05.2006 - 09:27 Uhr

Wieso zwei VertexStreams? Verwend doch einfach zwei aufeinanderfolgende DrawPrimitive Aufrufe ...

Wie sieht denn deine Textur aus? Vielleicht musst du einen Colokey schreiben o.ä.
Es kann auch sein das du die Texturkoordinaten falsch angibst. Gib mal ein wenig Code

04.03.2006 - 10:10 Uhr

Original von alexander
Mh... Was soll ich bei der Umfrage da wohl nur anklicken ... 😉

Geht mir genauso -.-
Wobei, bevor mycsharp.de gegründet wurde gab es ja noch viel ... rss-networ, redstar, dev-com ...

17.02.2006 - 10:15 Uhr
EventLog[] logs = EventLog.GetEventLogs();
foreach(EventLog l in logs)
		Console.WriteLine(l.Log);

Das ganze geht auch Remote. Einfach GetEventLogs den Maschinennamen übergeben ...

24.12.2005 - 20:43 Uhr

Viel Spaß und Gratulation an die Gewinner.

Und allen anderen auch noch fröhliche Weihnachten.

12.12.2005 - 16:05 Uhr

Hi!

Eine einfache Frage an die theoretischen Informatiker hier: Gibt es eine rekursive Definition die sich nicht iterativ darstellen lässt?

10.12.2005 - 15:49 Uhr

if( networkStream.CanWrite) {
byte[] myMessage = Encoding.ASCII.GetBytes("Vielleicht mal msdn.microsoft.com anschauen");
networkStream.Write( myMessage, 0,myMessage.Lenght);
}
else
  // Kein senden möglich

Write

Auf der MSDN Site gibt es auch Examples zum Lesen und zum erstellen eines NetworkStream

29.11.2005 - 15:35 Uhr

System.Globalization.CultureInfo.CurrentCulture gibt dir die aktuelle Kultur zurück.
Und über die System.Globalization.CultureInfo Klasse lässt sich dann alles auslesen.
Für deinen Zweck dürften ThreeLetterISOLanguageName(das gibt nur zB deu zurück) und ThreeLetterWindowsLanguageName(das gibt auch noch das Land zurück zB dea für Deutsch/Österreich) alles beschreiben.

27.11.2005 - 12:05 Uhr

Nope. Hab es gerade gecheckt. Firewall ist nicht schuld.

27.11.2005 - 10:14 Uhr

Hi!

Ich habe gerade Visual Studio 2005 installiert, aber beim Starten sagt der mir "There is no content available yet. Content will be downloaded when a connection to the Database is established." (siehe Screenshot unten)
Das Problem ist aber das ich mit dem Internet verbunden bin.

26.11.2005 - 17:21 Uhr

Wenn ich meine Beta 2 installiere und starten will kommt "Beta period expired. We
thank you for taking part blabla".

Aber es ist sowieso besser wenn du für alles die Express Editionen verwendest.

26.11.2005 - 15:51 Uhr

Die Betas sind bereits ausgelaufen dh du kannst keine Beta 2 Software mehr verwenden.

Es gibt jedoch eine Express Edition vom SQL Server 2005.

Aber du kansnt ja auch die Beta 2 vom Visual Studio 2005 nicht mehr verwenden.

26.11.2005 - 15:44 Uhr

Für Windows NT und aufwärts kann man da System-call Hooking verwenden.
Im Dr. Dobbs Journal gibts da einen Artikel: http://www.ddj.com/documents/s=945/ddj9701e/

Für Windows 95 und aufwärts kannst du das nicht verwenden, da musst du virtuelle Devicetreiber verwenden. kA wie das geht ^^

Und unter Windows 2003 kannst du Registry Callbacks verwenden.

Ist alles ziemlich nahe am System, deswegen solltest du schon ein wenig mit Windows Kernelprogrammierung vertraut sein.

25.11.2005 - 15:52 Uhr

Original von .unreal

Original von hauptmann

Original von .unreal
Hi cook

guck mein Code an, simpler geht es nicht

Gruss,
.unreal

Bei deinem Code sollte er aber noch den Compilerswitch "/target:winexe" angeben, da ja standardmäßig /target:exe aktiviert ist und das ein Konsolenfenster öffnet. Und das will er ja nicht.

Hi Hauptmann

Habe ich nicht, und ich kriege kein Konsolenfenster.

Gruss,
.unreal

Wie erstellst du dein Projekt.
Wenn ich eine einfache Datei erstelle und einfach ein main mit einem while(true); drin habe dann mit dem csc kompiliere dann kommt bei mir ein Konsolenfenster.
Und wenn ich nocht /target:winexe habe, bekomme ich keins.

Machst du evtl. dein Programm über den Windows Forms Assistenten im Visual Studio? Dann ist das standaradmäßig gesetzt. Aber der Compiler selbst verwender als Standard target exe

24.11.2005 - 17:55 Uhr

Original von .unreal
Hi cook

guck mein Code an, simpler geht es nicht

Gruss,
.unreal

Bei deinem Code sollte er aber noch den Compilerswitch "/target:winexe" angeben, da ja standardmäßig /target:exe aktiviert ist und das ein Konsolenfenster öffnet. Und das will er ja nicht.

24.11.2005 - 17:39 Uhr

Ja, und von Cobol will ich hier nichts wissen, auch wenn es Cobol.net gibt. -.-

23.11.2005 - 19:53 Uhr

Original von svenson
Klar hat C++ seine Berechtigung, aber aus meiner Sicht ist das was für Masochisten..... wenn ich wählen kann und die Anwendung es zuläßt wäre C++ die letzte Sprache die ich wählen würde.

Mir tun die Leute immer leid, die damit arbeiten müssen (du hörst das Selbstmitleid 🙂 ). C++ ist das Cobol des 21. Jahrhunderts.

Da ich selbst Cobol und C++ programmiere kann ich dem nicht zustimmen. Cobol ist einfach grausam, der, der die Sprache erfunden hat muss eindeutig ein wenig naja verrückt gewesen sein ^^

C++ halte ich dafür für logischer und übersichtlicher als Cobol. Schon in den Anfangszeiten von Cobol wusste man das es den Geist verkümmert.
Wobei ich Cobol lernen MUSS und C++ von selbst aus gelernt habe. Daher bin ich wohl ein wenig voreingestellt 😁
Mir tun daher eher Leute leid, die mit Cobol arbeiten müssen (grausam, allein wenn ich denke das ich mich bald auch noch mit Cics beschäftigen muss ...) ...

23.11.2005 - 19:48 Uhr

Oder man schreibt einfach informative Posts, in denen man erwähnt welche Version man verwendet.

23.11.2005 - 19:46 Uhr

Ja, wobei es nur diesen Workaround gibt, da sogar die Language Specification ausdrücklich sagt: "Static constructors are not inherited, and cannot be called directly. "

Hab grad in der MSDN mal nachgeschaut.

23.11.2005 - 19:29 Uhr

Geht nicht. Static Konstruktoren lassen sich nicht direkt aufrufen, aber du kannst ja auf eine Dummy Funktion zurückgreifen.
Wenn man jetzt CallStaticConstructor aufrufst wird zuerst der Konstruktor aufgerufen und dann in die Funktion CallStaticConstructor verzweigt.


	class foo
	{
		static foo()
		{
			Console.WriteLine("static foo has been called");
		}

		public static void CallStaticConstructor()
		{
		}
	}

22.11.2005 - 17:54 Uhr

Naja, es ist eigentlich egal ob ich es downloade oder bestelle. Aber ich hab nur 10gb Trafficvolumen bei meiner Internetverbindung.
Aber naja, ich downloade es gerade. Hoffe mal das geht schnell ^^

22.11.2005 - 17:37 Uhr

So, hab grad die Besätitung für die Aktivierung meines Premium Accounts abgeschlossen. Aber wie ich sehe kann man sich das VS 05 wohl nur downloaden -.-

20.11.2005 - 12:27 Uhr

Gut, vielen Dank. Dann kann ich mich ja da registrieren.

20.11.2005 - 12:22 Uhr

Hi!

Kennt hier vielleicht jemand das theSpoke Premium Angebot?
Ich würde mich dafür interessieren, aber bekommt man da bereits Visual Studio 2005 (Student Version).

Oder wo kann ich sonst die Student Version von Vs 2005 bekommen? Bin ja schließlich Schüler und wäre ja dumm wenn ich die Angebote von MS nicht nutzen würde.

20.11.2005 - 11:23 Uhr

Auf weitere 20 Jahre mit Windows.

19.11.2005 - 13:53 Uhr

Um das minimieren abzufangen brauchst du keine Hook und kein überschreiben der WndProc. Geht ganz einfach und sauber (WndProc finde ich nicht gerade sauber, da man hier direkt in die Messageqeue eingreift ...)


this.Resize += new System.EventHandler(this.Form1_Resize);

....
private void Form1_Resize(object sender, System.EventArgs e)
{
	if (WindowState == FormWindowState.Minimized) 
		WindowState = FormWindowState.Normal;
}

Das verhindert das Minimieren sauber und einfach.

btw: Beitrag verschoben nach Windows Forms.

19.11.2005 - 11:56 Uhr

Ich weiß jetzt nicht ob die auch nach Deutschland versenden aber bisher habe ich mir Seidl Software sehr gute Erfahrung gemacht.

03.10.2005 - 21:48 Uhr

Geh mal auf die Project Propeties und setzte dann den Charactar Set unter General auf "Not Set".

03.10.2005 - 16:25 Uhr

Von MS gibts auch einen Freeware XML Editor: XML Notepad.

03.10.2005 - 16:19 Uhr

Original von S.H.-Teichhof
ja es solte stimmen auch wenn noch zu sagen wäre das eine zeimessung in einem Computer nie wirklich exakt ist da zu minderwertige komponenten eingesetzwerden

Derzeit noch aber mit HPET dürfte sich das ändern.
Das ist ein extrem genauer Hardwaretimer.

02.10.2005 - 10:10 Uhr

Im DirectX 9 SDK gibts dazu ein Beispiel.
Installiere das Sample "EmptyProject" und dann schau mal in die Funktion Microsoft.Samples.DirectX.UtilityToolkit.Framework.ToogleFullscreen.

Ich denke mal der Code sollte dir weiterhelfen.

02.10.2005 - 10:03 Uhr

Es gibt imho schon genug Tutorials und Bücher für die Grundlagen von C# 😉

12.09.2005 - 10:05 Uhr

Die Funktionsweise von beiden ist dieselbe, der einzige Unterschied ist das ein ref Parameter zuvor initalisiert werden muss, ein out Parameter jedoch nicht.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfref.asp
An argument passed to a ref parameter must first be initialized. Compare this to an out parameter, whose argument does not have to be explicitly initialized before being passed to an out parameter.

11.09.2005 - 19:10 Uhr

Ich denke mal Serverseitig würde das am Besten mit Sessionvariablen und entsprechendem Code in der Page Load von Test.aspx.

11.09.2005 - 00:35 Uhr

Dafür gibt es das Rund um die Programmierung Forum.

10.09.2005 - 17:30 Uhr

Du kannst doch die WinAPI Funktion EnumServicesStatusEx importieren. Mit dieser Funktion bekommst du viele Informationen zu den einzelnen Diensten denn net start gibt ja nur den Namen aus.

Aber da du Java verwendest solltest vielleicht darauf achten platformunabhängig zu bleiben (außer es wird von Anfang an eine properitäre Software) deshalb würde ich eher sagen du probierst auf den Dienst irgendwie plattformunabhängig zuzugreifen wenn es geht. (wenn zB der Dienst an einem Port horcht oder so)

10.09.2005 - 17:23 Uhr

Ich denke mal das liegt am COM im Namen. Damit assoziieren viele Entwickler halt schlechte Erfahrung 😁

16.08.2005 - 12:12 Uhr

Registry ist schlecht und für Anwendungsdaten nicht der von MS vorgeschlagende Weg.
Und wenn du die Suche mal benutzen würdest findest du genug Threads zu diesem Thema:
Link
Link
Link

Imho ist es aber besser wenn du eine XML/INI Datei in das Eigene Dateien Verzeichnis des aktuellen Users legst und dort alle wichtigen Pfade etc. speicherst.

16.08.2005 - 12:04 Uhr

Original von myBig?
Im grunde bin ich mir sicher, dass es nicht nochmal in der ListView auftaucht. Kann es dir gerne mal über Screenshot posten. Leider muss ich dir sagen, dass ich nicht weiß es das geht 😦. Wie gehts denn bitte
Ciao Olli

Anwendung starten -> Print Screen/Druck Taste drücken -> Start -> Ausführen -> mspaint -> Strg-V -> Datei -> Speichern Unter -> Dateityp: JPEG (wichtig!) -> Dateiname eingeben -> Speichern.
Dann zurück ins Forum gehen und auf Antworten und dann siehst du ganz unten über Antwort erstellen ein Feld Dateianhang.

16.08.2005 - 12:00 Uhr

RSS Feeds sind im Grunde XML Dokumente.
Wie du ein RSS Feed herunterladest sollte klar (System.Web etc.)

Hier findest du dann eine Spezifikation für RSS.
Und um das RSS jetzt einzubetten währe es für deinen Fall wohl am Besten eine einfache Wrapper Klasse ConcurrencyConverter der das RSS herunterladet, es parst und dann die Informationen als Propeties zur Verfügung stellt.

Den RSS Feed parst du mithilfe der Klassen aus dem System.XML Namespace.