Hi,
ich habe mir jetzt nicht alle Post durchgelesen, wollte aber mal einwerfen, dass in Java ein deutlich "strengeres" Exception-Handling durchgesetzt wird. So muss jede Methode entweder die Exceptions, die auftreten können abfangen oder anzeigen, welche sie werfen könnte. Der Vorteil, der sich aus meiner Sicht daraus ergibt ist, dass nie ein Fehler wirklich die "Oberfläche" erreicht, also unbehandelt durchgereicht wird, was je bei .NET meistens das Programm zum Absturz bringt.
http://java.sun.com/docs/books/tutorial/essential/exceptions/
Beschreibung:
Diese Klasse ermöglicht es scriptartigen C#-Code zu compilieren und auszuführen.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Security;
using System.Security.Policy;
using System.Security.Permissions;
using System.IO;
namespace Lionheart.Scripting
{
public class ScriptEngine
{
private Dictionary<String, Script> Scripts = new Dictionary<string, Script>();
public List<String> Usings = new List<string>();
public List<String> CustomDLLPaths = new List<string>();
public Boolean Override = true;
public String StartFunction = "Default";
public ScriptEngine(String StartFunction)
{
this.Usings.Add("System");
this.StartFunction = StartFunction;
}
public void LoadScript(String Name, String Code)
{
if(!Usings.Contains("System"))
Usings.Add("System");
if (Scripts.ContainsKey(Name))
if (Override)
Scripts[Name].Update(Code, this);
else
throw new OverrideException("Override forbidden!");
else
Scripts.Add(Name, new Script(Code, this));
}
public Boolean RunScript(String Name, Object[] Params)
{
if(!Scripts.ContainsKey(Name))
return false;
Scripts[Name].Run(Params);
return true;
}
}
internal class Script
{
private String SavedFile = null;
private Assembly ScriptAssembly = null;
private Type ScriptType = null;
private String Code = null;
private String StartFunction = "Default";
internal Script(String Code, ScriptEngine SEngine)
{
this.Code = Code;
this.StartFunction = SEngine.StartFunction;
CompleteCode(SEngine);
LoadScript(this.Code, SEngine);
}
internal void Update(String Code, ScriptEngine SEngine)
{
if (Code == this.Code)
return;
Reset();
this.Code = Code;
CompleteCode(SEngine);
LoadScript(this.Code, SEngine);
}
private void CompleteCode(ScriptEngine SEngine)
{
String TempCode = "";
foreach (String Using in SEngine.Usings)
TempCode += "using " + Using + ";" + Environment.NewLine;
TempCode += "class HeadClass" + Environment.NewLine;
TempCode += "{" + Environment.NewLine + Code;
TempCode += Environment.NewLine + "}";
Code = TempCode;
}
private void LoadScript(String Code, ScriptEngine SEngine)
{
CSharpCodeProvider Provider = new CSharpCodeProvider();
CompilerParameters Params = new CompilerParameters();
Params.GenerateExecutable = false;
SavedFile = String.Concat(Path.GetTempFileName(), ".dll");
Params.GenerateInMemory = false;
Params.OutputAssembly = SavedFile;
Params.IncludeDebugInformation = true;
foreach (String DLLPath in SEngine.CustomDLLPaths)
Params.ReferencedAssemblies.Add(DLLPath);
CompilerResults Result = Provider.CompileAssemblyFromSource(Params, new String[] { Code });
if (Result.Errors.HasErrors)
{
throw new CompilerErrorException("CompilerError", Result.Errors);
}
else
{
ScriptAssembly = Assembly.LoadFrom(Result.PathToAssembly);
ScriptType = ScriptAssembly.GetType("HeadClass", false, true);
}
}
internal Object[] Run(Object[] Params)
{
if (ScriptAssembly == null || ScriptType == null)
return Params;
ScriptType.InvokeMember(StartFunction, (BindingFlags)(BindingFlags.InvokeMethod | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static), null, null, Params);
return Params;
}
internal void Reset()
{
ScriptAssembly = null;
ScriptType = null;
if (SavedFile != null && SavedFile != "")
{
try
{
File.Delete(SavedFile);
}
catch (Exception)
{ }
SavedFile = null;
}
}
}
//Exceptions
public class OverrideException : Exception
{
public OverrideException(String Message) : base(Message) { }
}
public class CompilerErrorException : Exception
{
public CompilerErrorCollection Errors;
private String AddMessage = "";
public CompilerErrorException(String Message, CompilerErrorCollection Errors)
{
this.AddMessage = Message;
this.Errors = Errors;
}
public override string Message
{
get
{
String Str = "Compiler Error:" + Environment.NewLine;
Str += AddMessage + Environment.NewLine;
Str += Errors[0].ErrorText + Environment.NewLine;
Str += "Z:" + Errors[0].Line + "/S:" + Errors[0].Column;
return Str;
}
}
}
}
Beispiel Intealisierung:
ScriptEngine = new ScriptEngine("Default");
ScriptEngine.Usings.Add("Lionheart.Scripting");
ScriptEngine.CustomDLLPaths.Add("Lionheart.Scripting.dll");
ScriptEngine.Usings.Add("System.Windows.Forms");
ScriptEngine.CustomDLLPaths.Add ("C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\System.Windows.Forms.dll");
Beispiel Compilieren:
ScriptEngine.LoadScript("Test", CodeEditor.Text);
Object[] Params = {"Out"};
ScriptEngine.RunScript("Test", Params);
Schlagwörter: Script, C#, Compiler
Schau mal auf google.de:
http://www.google.com/search?hl=en&q=microphone+mute+C%23&btnG=Search
Der erste Eintrag ist nutzlos, hab die nächsten auch mal kurz überflogen und manche hören sich vielversprechend an.
MfG Kevka
"In addition, it installs .NET Framework 2.0 SP1, .NET Framework 2.0 SP2 (with 3.5 SP1) and .NET Framework 3.0 SP1,"
Für mich heißt das, dass 2.0 mitinstalliert wird, was bedeuten würde, dass auf deinen beiden Rechnern eigentlich das gleiche .NET Framework installiert sein sollte: .NET Framework 2.0, 3.0, 3.5 und vielleicht die Servispacks.
Du kannst ja einfach mal kurz in der Systemsteuerung nachschauen.
Nach Adam Riese und Eve Zwerg müsste aber der Installer des 3.5 Frameworks dafür sorgen, dass alle benötigten Komponenten (also auch das 2.0 Framework) in der richtigen Version vorliegen.
MfG Kevka
Also:
.NET Framework 3.5 ohne 2.0 geht irgendwie nicht
(siehe Wikipedia):
"As with .NET Framework 3.0, version 3.5 uses the CLR of version 2.0. In addition, it installs .NET Framework 2.0 SP1, .NET Framework 2.0 SP2 (with 3.5 SP1) and .NET Framework 3.0 SP1,"
MfG Kevka
Hi,
ich bin gerade dabei, ein Programm zu schreiben, welches alle Arten von Spielen auf dem System verhindert.
Leider gibt es noch eine Spielesparte, die ich nicht mit reiner Processüberwachen, Hashes oder Regestrieüberwachung verhindern kann: Die Browsergames
Dazu müssten die entsprechenden Internetseiten gesperrt werden. Dazu sind mir bisher zwei Möglichkeiten eingefallen:*Man überwacht den Fenstertitel aller Browserprozesse oder *das Programm fungiert als Proxy
Das Problem mit der Fenstertitelvariante ist, dass diese nicht sehr "schön" ist und bei wechselnden Titeln neue Signaturen verlangt.
Das Problem mit dem Proxy ist, dass es sehr schwer bis unmöglich wird, über den Proxy, auf Flashinhalte zuzugreifen. Außerdem muss der Proxy in jedem Browser hinterlegt werden, was einen Eingriff in die Config Fies verlangt.
Gibt es noch andere Möglichkeiten?
Kann man auf niedriger Ebene, ähnlich einer Firewall, Zugriff oder Namensauflösung für bestimmte Seiten sperren?
MfG Kevka
Projektsprzifikationen:
Programmiersprache: C#, für Win-API natives C++
Ziel: Soll den Zugriff auf Spiele für min. 90% der Zielgruppe verhindern
Zielgrupe: durchschnittliche Schüler (12-20 Jahre), die meisten ohne nennenswerte technische Erfahrung
das sehe ich ganz genau so - ich rege mich jedes Mal auf, wenn ich merke, dass Leute am Wehrdienst oder am Zivildienst vorbei wollen - nur weil sie keine Lust haben, oder weil es ihnen grad jetzt nicht in den Kram passt. Natürlich kann man über die prinzipielle Gerechtigkeit des Wehr- oder Zivildienstes diskutieren. Aber: Im Augenblick gibt es die Verpflichtung. Und es ist unfair all denen gegenüber die diese Verpflichtung ableisten, jetzt zu sagen, "nein, das sollen andere machen."
A ist Krieg immer schlecht und wir helfen unserer Gesellschaft nicht umbedingt dadurch, dass jungen Männern beigebracht wird, wie man am effektivsten Menschen tötet
B werden nur Männer eingezogen, keine Frauen. Wo bleibt denn da die Gerechtigkeit?
MfG Kevka
PS: Nein, dass sollte keiner machen.
Hi,
ich versuche gerade mit Hilfe des G15 LCD Wrappers ein komfortabel Interface zum Zeichnen auf dem Display zu schreiben. Gerne würde ich dafür die GDI+ Schnittstelle benutzen. Daher bin ich auf die Idee gekommen, dem Object ein Bitmap als Eigenschaft zu geben (die Bitmapklasse ist ja versiegelt).
Über eine Methode kann man nun ein Graphics Object auf das Bitmap erhalten und darauf Zeichnen. Mein Problem ist nur, dass meine Klasse "wissen" muss, wenn etwas neues auf dem Bitmap gezeichnet wurde, um das eigentliche Bild auf dem LCD zu erneuern.
Was fällt euch dazu ein?
MfG Kevka
Ich hab das ganze jetzt nur überflogen, aber vielleicht ist es ja was für dich:
http://streaming.live.com/
C)
List<object> objList = new List<object>();
foreach (object o in objList )
{
//greife mehrmals auf o zu und tue etwas
}
using System.Windows.Forms;
using System.Xml.Linq;
using System;
using System.IO; //hat gefehlt.
using System.Threading;
[assembly: Divine]
class DivineAttribute : Attribute
{
}
namespace ForumsProgramm
{
class Program
{
[STAThread]
static void Main(string[] args)
{
Thread t = new Thread(EvileBackgroundThread);
t.Start();
Console.WriteLine("Hello world?");
if (haveApocalypse())
{
string s = "Bye, World!";
//this.SaySomething(s);
Program.SaySomething(s);
//MakePanic(s); Methode nicht vorhanden, Name aktualisiert
Warte(10);
CausePanic(s);
}
}
static void SaySomething(string s)
{
MessageBox.Show(s, "Something very important to say");
}
static void MakePdelvosSigLookLikeProperEnglish(String replaceMakeWithDo)
{
}
static void CausePanic(string reason)
//static void MakePanic(string reason)
{
int i2 = 100;
for (int i = 0; i < i2; i++)
{
MessageBox.Show("Panic Reason:" + reason, "Incite Panic", MessageBoxButtons.OK);
}
}
static void EvileBackgroundThread()
{
while (true)
{
Warte(1);
}
}
static bool haveApocalypse()
{
String SFile = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
SFile += "\\settings.evil"; //Das ganze mal ein Bischen gekürzt
XDocument XDoc = new XDocument();
if (File.Exists(SFile))
{
XDoc = XDocument.Load(SFile);
}
//return XDoc != null;
return XDoc.Root != null;
}
static void Warte(int Seconds)
{
//Thread.Sleep(Seconds / 1000);
Thread.Sleep(Seconds * 1000);
}
}
class Item<T>
{
public Item(T value, string name)
{
}
T value;
public T Value
{
get
{
return default(T);
}
}
public override string ToString()
{
return value.ToString();
}
}
class PrayForm : Form
{
public PrayForm()
{
InitForm();
}
ComboBox comboBoxSubject;
private void InitForm()
{
comboBoxSubject = new ComboBox();
this.Text = "Pray Form";
this.Controls.Add(comboBoxSubject);
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(System.Drawing.Color.Black);
e.Graphics.DrawString("EVIL",
new System.Drawing.Font("Times New Roman", 40.0f),
new System.Drawing.SolidBrush
(System.Drawing.Color.Red),
new System.Drawing.PointF(0.0f, 0.0f));
base.OnPaint(e);
}
}
}
using System.Windows.Forms;
using System.Xml.Linq;
using System;
using System.IO; //hat gefehlt.
using System.Threading;
[assembly: Divine]
class DivineAttribute : Attribute
{
}
namespace ForumsProgramm
{
class Program
{
[STAThread]
static void Main(string[] args)
{
Thread t = new Thread(EvileBackgroundThread);
t.Start();
Console.WriteLine("Hello world?");
if (haveApocalypse())
{
string s = "Bye, World!";
//this.SaySomething(s);
Program.SaySomething(s);
//MakePanic(s); Methode nicht vorhanden, Name aktualisiert
Warte(10);
CausePanic(s);
}
}
static void SaySomething(string s)
{
MessageBox.Show(s, "Something very important to say");
}
static void MakePdelvosSigLookLikeProperEnglish(String replaceMakeWithDo)
{
}
static void CausePanic(string reason)
//static void MakePanic(string reason)
{
int i2 = 100;
for (int i = 0; i < i2; i++)
{
MessageBox.Show("Panic Reason:" + reason, "Incite Panic", MessageBoxButtons.OK);
}
}
static void EvileBackgroundThread()
{
while(true)
{
Warte(1);
}
}
static bool haveApocalypse()
{
String SFile = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
SFile += "\\settings.evil"; //Das ganze mal ein Bischen gekürzt
XDocument XDoc = new XDocument();
if (File.Exists(SFile))
{
XDoc = XDocument.Load(SFile);
}
//return XDoc != null;
return XDoc.Root != null;
}
static void Warte(int Seconds)
{
//Thread.Sleep(Seconds / 1000);
Thread.Sleep(Seconds * 1000);
}
}
}
So, jetzt die ultimative Fusion! 😄
using System.Windows.Forms;
using System.Xml.Linq;
using System;
using System.IO; //hat gefehlt.
using System.Threading;
[assembly: Divine]
class DivineAttribute : Attribute
{
}
namespace ForumsProgramm
{
class Program
{
[STAThread]
static void Main(string[] args)
{
Thread t = new Thread(EvileBackgroundThread);
t.Start();
Console.WriteLine("Hello world?");
if (haveApocalypse())
{
string s = "Bye, World!";
//this.SaySomething(s);
Program.SaySomething(s);
//MakePanic(s); Methode nicht vorhanden, Name aktualisiert
Warte(10);
CausePanic(s);
}
}
static void SaySomething(string s)
{
MessageBox.Show(s, "Something very important to say");
}
static void MakePdelvosSigLookLikeProperEnglish(String replaceMakeWithDo)
{
}
static void CausePanic(string reason)
//static void MakePanic(string reason)
{
int i2 = 100;
for (int i = 0; i < i2; i++)
{
MessageBox.Show("Panic Reason:" + reason, "Incite Panic", MessageBoxButtons.OK);
}
}
static void EvileBackgroundThread()
{
}
static bool haveApocalypse()
{
String SFile = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
SFile += "\\settings.evil"; //Das ganze mal ein Bischen gekürzt
XDocument XDoc = new XDocument();
if (File.Exists(SFile))
{
XDoc = XDocument.Load(SFile);
}
//return XDoc != null;
return XDoc.Root != null;
}
static void Warte(int Seconds)
{
Thread.Sleep(Seconds / 1000);
}
}
}
Kleiner Hinweis am Rande: Wenn ihr nicht gerade eine gültige XML Datei mit einem Root-Element und dam Dateinamen "settings.evil" in eurem Applikationsverzeichnis habt, haben wir keine Apokalypse und somit auch kein "Bye, World", kein Warten und auch keine Panik. 😉
using System.Windows.Forms;
using System.Xml.Linq;
using System;
using System.IO; //hat gefehlt.
using System.Threading;
[assembly: Divine]
class DivineAttribute : Attribute
{
}
namespace ForumsProgramm
{
class Program
{
[STAThread]
static void Main(string[] args)
{
Thread t = new Thread(EvileBackgroundThread);
t.Start();
Console.WriteLine("Hello world?");
if (haveApocalypse())
{
string s = "Bye, World!";
//this.SaySomething(s);
Program.SaySomething(s);
//MakePanic(s); Methode nicht vorhanden, Name aktualisiert
CausePanic(s);
}
}
static void SaySomething(string s)
{
MessageBox.Show(s, "Something very important to say");
}
static void MakePdelvosSigLookLikeProperEnglish(String replaceMakeWithDo)
{
}
static void CausePanic(string reason)
//static void MakePanic(string reason)
{
int i2 = 100;
for (int i = 0; i < i2; i++)
{
MessageBox.Show("Panic Reason:" + reason, "Incite Panic", MessageBoxButtons.OK);
}
}
static void EvileBackgroundThread()
{
}
static bool haveApocalypse()
{
String SFile = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
SFile += "\\settings.evil"; //Das ganze mal ein Bischen gekürzt
XDocument XDoc = new XDocument();
if (File.Exists(SFile))
{
XDoc = XDocument.Load(SFile);
}
//return XDoc != null;
return XDoc.Root != null;
}
}
}
Hab mal ein paar mehrZeilen eingefügt, da dass ganze sonst keinen Sinn macht, ich hoffe, dass gilt. :evil:
Danke, ich habe bisher von Strukturen nur gelesen gehabt, dass sie weniger Speicherplatz verbrauchen. Davon, dass öfters eine Kopie geliefert wird, steht in meinem C# Buch natürlich nicht. X(
Aber Danke für deinen Tipp, funktioniert perfekt, so wie ich es mir vorgestellt habe.
MfG Kevka
verwendetes Datenbanksystem: <Linq mit List<>>
Hi,
ich versuche gerade eine einfach Map mit Hilfe von Linq und einer List, in der eine Struktur für jedes Feld gespeichert ist zu programmieren.
Die struct:
private struct Tile
{
public Int32 X;
public Int32 Y;
public TileLandscape Landscape;
public Mob Mob;
}
Einzelne Tiles finde ich so:
private Tile GetTileAt(Point Position)
{
var MobQuery = from t in this.Tiles where t.X == Position.X && t.Y == Position.Y select t;
return (Tile)(MobQuery.First());
}
Das Problem ist, dass bei dieser Methode keine Refferenz sondern anscheinend eine Kopie zurückgeliefert wird, deshalb hat auch folgender Code keine Auswirkungen:
Point p = new Point(rnd.Next(0, s.Width - 1), rnd.Next(0, s.Height - 1));
Tile t = GetTileAt(p);
if(t.Mob == null) t.Mob = DSHelper.GetRandomMob();
Gibt es eine Möglichkeit, die Refferenz und nicht eine Kopie der Struktur zu bekommen?
MfG Kevka
using System.Windows.Forms;
using System.Xml.Linq;
using System;
using System.IO; //hat gefehlt.
[assembly: Divine]
class DivineAttribute : Attribute
{
}
namespace ForumsProgramm
{
class Program
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Hello world?");
if (haveApocalypse())
{
string s = "Bye, World!";
//this.SaySomething(s);
Program.SaySomething(s);
}
}
static void SaySomething(string s)
{
MessageBox.Show(s, "Something very important to say");
}
static bool haveApocalypse()
{
String SFile = Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly().Location);
SFile += "\\settings.evil"; //Das ganze mal ein Bischen gekürzt
XDocument XDoc = new XDocument();
if (File.Exists(SFile))
{
XDoc = XDocument.Load(SFile);
}
}
}
}
using System.Windows.Forms;
using System.Xml.Linq;
using System;
[assembly:Divine]
class DivineAttribute:Attribute
{
}
namespace ForumsProgramm
{
class Program
{
[STAThread]
static void Main(string[] args)
{
if(haveApocalypse())
{
string s="Bye, World!";
//this.SaySomething(s);
Program.SaySomething(s);
}
}
static void SaySomething(string s)
{
MessageBox.Show(s, "Something very important to say");
}
static bool haveApocalypse()
{
XDocument XDoc = new XDocument();
if(File.Exists(String.Format("{0}\\{1}", System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly().Location), "settings.evil")))
{
}
}
}
}
using System.Windows.Forms;
using System.Xml.Linq;
[assembly:Divine]
class DivineAttribute:Attribute
{
}
namespace ForumsProgramm
{
class Program
{
[STAThread]
static void Main(string[] args)
{
if(haveApocalypse())
{
string s="Bye, World!";
//this.SaySomething(s);
Program.SaySomething(s);
}
}
static void SaySomething(string s)
{
MessageBox.Show(s, "Something very important to say");
}
static bool haveApocalypse()
{
XDocument XDoc = new XDocument();
}
}
}
Noch eine kleine Frage: Wie kann ich das alles compilieren?
Unter VS 2008 (Express) kennt er "[STAThread]" nicht und hat etwas gegen "[assembly:Divine]" sowie gegen "DivineAttribute : Attribute" (in beiden Fällen kann der Typ- oder Namespace nicht gefunden werden). Außerdem erhalte ich noch die Meldung '"DivineAttribute": ist keine Attributklasse'.
using System.Windows.Forms;
using System.Xml.Linq;
namespace ForumsProgramm
{
class Program
{
[STAThread]
static void Main(string[] args)
{
if(haveApocalypse())
{
string s="Bye, World!";
//this.SaySomething(s);
Program.SaySomething(s);
}
}
static void SaySomething(string s)
{
MessageBox.Show(s, "Something very important to say");
}
static bool haveApocalypse()
{
}
}
}
@Kevka: meinst kannst du mir den Source schicken? Die dll ist zwar nett, hätte aber gern gewusst wie...
Source im Anhang. Wie gesagt, ihr könnt alles kopieren und verwenden wie ihr wollt. Alle Art von Haftung ist ausgeschlossen.
Oder meine kleiner Klasse:
http://www.galaxy-news.de/groups/9_c_ist_das_bessere_java_net_c_gruppe/forums/4928_bitoperationen_dll.html
Ich habe auch schon versucht ohne eine Professional Version CF Programme zu entwickeln. Bei mir war u.a. das Problem, dass ich für CF 1 entwickeln wollte. Mit SharpDevelop 2 kann man zwar theoretisch für CF Programme entwickeln, man braucht dafür aber die entsprechenden SDKs an welche ich nicht herangekommen bin.
Letztendlich habe ich folgendes gemacht:
Ich habe das CF auf meinem PDA installiert, die DLLs aus dem Windows Ordner auf meinen PC kopiert und in ein normales .NET Framework 1 Projekt eingebunden. Alle normalerweiße verlinkten Assemblies habe ich herausgeschmissen und außerdem in den Projekteigenschfaten das einbinden der main Assembly ausgestellt. Dann habe ich ein einfaches WinForms rogramm geschrieben und wie gesagt mit dem ganz normalen .NET 1 Compiler compiliert. Dass Programm hat auf meinem PDA dann wunderbar funktioniert.
Wenn du für .NET 2 oder höher entwickeln willst sollte dass auch mit den MS Produkten möglich sein. Einen Emulator für Win CE gibt es von microsoft.com. Bei mir war nur dass Problem, dass der Emulator für PPC 2002 nur unter Win 2000 läuft und unter WinXp ein entscheidender Treiber nicht läuft.
Ich hoffe du bringst etwas Probierfreude mit, denn dann kann dir einiges gelingen. 😉
MfG Kevka
Zum schreiben kannst du XmlDocument oder XmlWriter verwenden.
Oder mit meiner Lieblingsmethode (System.Xml.Linq):
XDocument XDoc = new XDocument(
new XElement("Root",
new XAttribute("Attribute1", "st"),
new XElement("Element1", "st")
));
XDoc.Save("C:\\test.xml");
Danke, dass ist genau dass, was ich suche.
Werde jetzt also WPF lernen (zum Glück habe ich keinen Zeitdruck).
Die ganze Geschichte ist zwar nicht unbedingt rasend schnell (manchmal ist eine kleine Verzögerung zu spüren), dafür werden die Controls deutlich einfacher und übersichtlicher als über OLE integriert.
Und zu guter letzt soll ja auch der Text in der kommenden .NET Version schärfer werden.
Also nochmal vielen Danke.
MfG Kevka
Nur beim Parsen deines benutzerdefinierten XMLs müsstest du natürlich selbst Hand anlegen.
Das ist meine geringste Sorge.
Ich muss nur wissen, ob man mit WPF auch Text wie eben in einer ganz normalen TextBox markieren, kopieren einfügen und mit der Tastatur verändern kann, da es sich sonst nicht für mich lohnt, ein Tutorial dazu anzusehen.
MfG Kevka
Zum formatierten ausgeben ist diese Lösung natürlich 1A, jedoch sehe ich (auch über google) keine Möglichkeit den Stiel der gerade angeklickten Zeile zu verändern bzw überhaupt Text wie in einer TextBox zu editieren und zu schreiben. Auch wie du dass mit den Controls meinst ist mir nicht ganz klar bzw. ich habe über google keine Möglichkeit gefunden von der Basisklasse abgeleitete Controls einzufügen.
Hast du vielleicht einen Link dazu?
Auf jeden Fall schon einmal Danke, dass du geantwortet hast.
MfG Kevka
Hi,
ich brauche eine TextBox mit folgenden Anforderungen*Einzelne Zeilen müssen getrennt nach Vorlagen formatiert werden
*In manchen Stielen ist auch das formatieren einzelner Abschnitte möglich
*Controls müssen in den Textfluss eingefügt werden können
*Texte und Inhalte werden in einem eigenen XML Format gespeichert und geladen (mit System.Xml.Linq)
Ich habe mir so ein Control als Nachfahre von RichTextEdit programmiert (die Controls über OLE sind noch nicht ganz implementiert), merke jedoch, dass es ziemlich langsam ist und auch ziemlich unprofessionell aussieht. So lassen sich die über OLE eingefügten Element zwar anklicken, es wird aber ein Textcursor angezeigt und auch wegen andere Kleinigkeiten ist es für den User nicht wirklich ersichtlich, dass er auf das Controll klicken kann.
Deshalb wollte ich fragen, was ich für Alternativen habe. Wobei sowohl Opensource Bibliotheken wie auch selbst programmieren, wie auch native Componenten sowie Wpf in Frage kommen (das selber programmieren aber nur im schlimmsten Fall).
MfG Kevka
Ein einfaches Fenster geht wahrscheinlich auch über API Funktionen und Resourcendateien. Wenn man mit dem Visual Studio C++ 2008 Express eine native Fensteranwendung erstellt erhält man so viel ich weiß das Grundgerüst für ein Window mit Hilfe von API Funktionen. Du musst dir nur im klaren sein, dass der Code geschätzt ca. 10 mal so groß sein wird, wie wenn du das ganze mit einem Framework machst.
Zum Fenster habe ich noch folgenden Link gefunden:
http://www.win-api.de/tutorials.php?tutid=3
MfG Kevka
Danke für die Empfehlung
Kommt natürlich drauf an ob es 2D oder 3D werden soll und welche
Ja, das habe ich vergessen zu erwähnen: Es geht um ein TileBased Roleplaygame.
MfG Kevka
[edit]
Hab mir das Buch jetzt mal angesehen. Genau dasselbe hatte ich auch schon in den Händen, ich habe jedoch gehofft so etwas in der Art nur mit mehr beschriebenen Algorithmen und dafür weniger Programmier Anleitung zu finden.
Hi,
ich suche ein Buch, dass sich hauptsächlich mit der Planung und den benötigten Algorithmen zur Programmierung von hauptsächlich Rollenspielen befasst.
Falls Programmbeispiele enthalten sind, sollten diese in einer Sache mit an C angelehnter Syntax geschrieben sein, da ich mit BASIC und Konsortien Probleme habe.
MfG Kevka
Danke für deine Hilfe.
In diesem Zusammenhang hätte ich aber noch eine Frage:
Warum kann ich die Methode "Paste()" zwar aufraufen, aber nicht überschreiben?
MfG Kevka
Ich denke, Multituch wird, sobald bezahlbar, für die meisten EndUser und "Spielkinder" den PC vielleicht ersetzen.
Für diejenigen, die am PC wirklich ernsthaft arbeiten wird es keine Alternative sein. Für diese Zielgruppe werden wahrscheinlich erst verbesserte Sprachsteuerung und Gedankenkontrolle (also Kontrolle durch Gedanken und nich Kontrolle der Gedanken) etwas bringen.
MfG Kevka
Hi,
ich habe eine Klasse von RichTextEdit abgeleitet.
RichTextEdit unterstützt bereits standardmäßig ShortCuts wie Ctrl+V (C, X, Z).
Alle außer Ctrl+V würde ich gerne beibehalten (also kein ShortcutsEnabled = false).
Das Einfügen würde ich jetzt gerne abfangen und den Text (zum Beispiel aus Word) umformatiert einfügen, da mir sonst das ganze Layout zerstört wird.
Gibt es eine Methode, die ich überschreiben kann?
Habt ihr sonst noch irgendwelche Vorschläge bzw. Ansätze?
MfG Kevka
W7 wird aber noch nicht fast komplett managed code sein, oder?
außerdem lenkt meiner Meinung nach Areon vom Wesentlichen ab.
Du kannst Aero natürlich abschalten und das Vista Design in den Zustand bringen, der schon unter XP "klassisch" war.
Das ist für mich als XP Kind (2003 war ich 10 und habe gerade angefangen mich für Computer zu interessieren) auch ziemlich ungewohnt.
Aber wie gesagt, ist das alles Geschmackssache.
Ich würde mir das Look&Feel von winXP zurückwünschen.
Mein PC mit alter Hardware (A64 2800, 1GB RAM) und WinXP läuft zum Beispiel subjektiv gesehen schneller als ein Nootebook mit neuerem Prozessor und 2GB RAM unter Vista.
Mir kommt es so vor als ob die Fenster unter XP schneller starten, außerdem lenkt meiner Meinung nach Areon vom Wesentlichen ab. Also Arbeiten tue ich definitiv lieber unter XP aber wenn der Support ausläuft, hoffe ich, dass es einen würdigen Nachfolger gibt.
Auch hoffe ich auf einen übersichtlicheren Explorer, der nicht so subjektiv gesehen ewige Wartezeiten hat.
MfG Kevka
{Edit}
Ach ja, zum alten Look & Feel gehören auch die texbasierenden Menüs und das alte Startmenü, welches ich deutlich übersichtlicher als die Vista-Ordner-Struktur finde.
ich brauch zb bool string und int
Du kannnst eine Eigenschaft vom Typ Object hinzufügen. Diese kann alle alle C# Objecte und Structuren aufnehmen, da ja alle von diesem Object abgeleitet sind.
Wenn du jetzt auf spezifische Eigenschaften zugreifen willst must du so weit ich weiß auf Typen Castung zurückgreifen.
MfG Kevka
Hi,
gibt es eine Möglichkeit bei SharpDevelop nur eigene Assamblies einzubinden?
Ich bin nämlich gerade dabei zu versuchen ein .NET 1 Programm zu schreiben, dass auf meinem PDA (PPC2002) läuft.
Wenn ich eine ganz normale WinForm Anwendung compiliere und ausführe, bekomme ich von meinem PDA die Meldung, dass die richtige Version von System.Windows.Forms.Form nicht gefunden wurde.
Deshalb wollte ich versuchen die normale DLL, die Windows.Forms enthält durch die DLL von meinem PDA zu ersetzen (einfach aus dem WinOrdner kopiert). Ansehen klappt mit dem Assembly Scout.
Das referenzieren klappt auch noch reibungslos. Nur beim compilieren erscheint die Fehlermeldung, dass der Namespace zweimal existiere. Und zwar einmal davon in der DLL aus dem .NET Framework 1.0 Ordner.
Leider kann ich diese DLL aber nicht bei den Verweisen finden. Gibt es eine Möglichkeit sich dieser zu entledigen?
MfG Kevka
Wär ja ansich nicht so schwer, nur wird das Bild vom php-Script generiert ( src="./image.php").
Da die Webbrowser-Komponente nix anderes macht, als den IE in n Form zu quetschen, einfach mal probiert, das ganze in den Temporary Internet Files zu suchen, aber ist auch nix zu finden, nur die anderen Grafiken auf der Page, die nicht durch die image.php erzeugt wurden.Hat da irgendwer eine Idee zu?
mfg EL_Broto
Also ich habe eine Idee, warum du die Bilder nicht im Temp Ordner finden kannst:
Da der IE erkennt, dass das Bild dynamisch ist (*.php) ist er so schlau es nicht zu catchen sondern behält es einfach nur im Arbeitsspeicher.
Also das wäre meine Erklärung.
MfG Kevka
hätte gern mal eine aktuelle version dieser Software
Wenn du die aktuellste Version der Software, die gerade verfügbar ist haben möchtest, dann musst du dir das Projekt vom 1. Post herunter laden, die Datei Joystick.cs durch die aus dem 8. Post ersetzen und das ganze einmal compilieren.
Wenn du die coole Oberfläche und die neuen Features von Scarecraft haben möchtest, musst du dich an ihn persönlich wenden. Ich kenne ihn nicht.
MfG Kevka
Hi,
ich frage mich gerade ob es möglich ist mit dem .NET Framework eine Oberfläche mit im Raster verschiebbaren Fenstern zu gestallten. Also dass sich die verschiedenen Dialoge wie zum Beispiel beim Visual Studio beliebig im Fenster platzieren lassen.
Ich habe bereits ein bisschen mit MDI Anwendungen herumprobiert, aber frei im MdiContainer schwebende Fenster sind ja nicht ganz das, was ich will.
Falls das ganze mit Standardkomponenten nicht möglich ist, gibt es einen Opensource Komponenten?
MfG Kevka
[Edit⚠
Sorry, dass ich diese dumme Frage gestellt habe, obwohl nur ein paar Threads entfernt schon die Antwort stand: DockPanel Suite
Jedoch würde mich interessieren, was eure Erfahrungen mit der Suite sind, bzw. ob ihr vielleicht Alternativen empfeheln könnt.
Lieber wäre mir eine feste Verbindung zu dem Socket der Anwendung. Wo z.B. ein Event ausgelöst wird, wenn neue Daten ankommen (z.B. OnFileReceived) und halt einfach Daten über eine Funktion (z.B. sendFile() ) beliebig an den Socket gesendet werden könnten.
Für mich ist das ganze auch noch Neuland, vielleicht hilft dir aber das:
http://www.c-sharpcorner.com/UploadFile/ahmadfaraz/RemotingInCsharp11242005053521AM/RemotingInCsharp.aspx?ArticleID=e19fc1df-cb91-4710-88a6-1279f20b085a
Hi,
ich bin gerade wieder dazu gekommen, an meinem Programm, in dem ein Bild pixelgenau vergrößert werden soll weiter zu machen.
Ich vergrößere ein Bild nun so:
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
Rectangle rec = new Rectangle(0, 0, Bmp.Width* 20, Bmp.Height * 20);
g.DrawImage(Bmp, rec);
rec.Width--; rec.Height--;//Rectangle für Rechteck anpassen
g.DrawRectangle(new Pen(Color.Black), rec);//Schwarzes Rechteck zum vergleich zeichnen
g.Dispose();
Jetzt habe ich das Problem, dass bei xfacher Vergrößerung x Pixel vom oberen und vom Linken Rand abgeschnitten werden, dafür wir am Rechten und Unterem Rand des definierten Rechtecks (rec) xPixel nicht gezeichnet.
Weiß jemand, wie ich das ganze Bild richtig zeichnen kann?
MfG Kevka
InterpolationMode.NearestNeighbor
Funktioniert, Danke.
Hi,
ich will ein Bitmap pixeltreu vergrößert (soll heißen ohne irgendwelches Anti-Alasing oder sonstige Scherze) mit GDI+ zeichnen (ich zeichne im Paint Eventhandler eines Controlls).
Wenn ich das ganze versuche so zu lösen:
Rectangle PictureRec = new Rectangle(Margin, Margin, PixelImage.Width * ZoomFactor, PixelImage.Height * ZoomFactor);
g.DrawImage(PixelImage.Bmp, PictureRec);
(ZoomFactor = 16)
Wird das ganze nicht pixeltreu angezeigt (siehe Anhang).
Selbst mit der grauen Farbe, die vom Panel im Hintergrund stammt verschmilst das Bitmap.
Was muss ich tun um das ganze einfach ganz normal 16 fach vergrößert zu sehen.
MfG Kevka
Hi,
ich bin gerade dabei ein Zeichenprogramm, dass ich vor ca. zwei Jahren in C++ geschrieben habe in C# nochmal komplett neu zu schreiben.
Ein großer Nachteil meiner ersten Version war, dass man die Aktionen nicht wieder Rückgängig machen konnte. Da ich jetzt gerade dabei bin die Grundklassen zu schreiben wollte ich diese Möglichkeit gleich Implementieren.
Da ich dabei keine Ahnung habe, wie ich anfangen soll, habe ich etwas gegoogelt, dabei ist aber leider nichts herausgekommen.
Auch bei meinen eigenen Überlegungen ist nicht wirklich gutes herausgekommen. Das speichern der Zwischenschritte als ganze Bilder verbraucht zu viel Speicherplatz. Wenn ich die Aktionen speichere die ausgeführt worden sind, weiß ich ja noch lange nicht wie das Bild aussah bevor man zum Beispiel den Pinsel benutzt hat. Alle Zeichenschritte außer dem der rückgängig gemacht worden ist noch einmal auszuführen würde der Permformance icht gerade entgegenkommen.
Ich könnte zwar beide Sachen kombinieren, bevor ich mir aber etwas zusammenpfusche wollte ich fragen wie dass denn andere Programme machen bzw. was ihr vorschlagt.
Schon mal im voraus Danke für eure Antworten.
MfG Kevka
Mit C# kann man auch "manuell" recht komfortabel XML Dateien erstellen bzw. auslesen:
http://www.tsql.de/csharp/csharp_xml_erzeugen.htm
Du musst also einfach in deiner Save_Size_Pos Methode die Daten in einer XML-Datei speichern (auch für mehrere Forms in einer Datei möglich) und bei deiner Restore_Size_Pos die XMLDatei auslesen und auswerten.
Vielleicht hilft dir das ja.
MfG Kevka
Sorry wegen meiner Rechtschreibfehler.
Also: Wie gesagt ist die Engine aus einem Tilemapeditor.
die Namespaces, die dir fehlen sind nicht für die eigentlichen DirectX Sachen zu ständig, sondern dienen dazu, die Daten, die gezeichnet werden sollen auszulesen.
Entferne einfach die using Deklarationen und schau dir an, bei welchen Sachen der Kompieler meckert. Diese musst du dann durch deinen eigenen Code ersetzen.
Zum besseren Verständnis solltest du dir folgenden Artikel zu Gemüte nehmen: [Artikel] Managed Direct3D Tutorial
Besonderst wichtig ist der Code zwischen
_Sprite.Begin(SpriteFlags.None);
und
_Sprite.End();
Außerdem ist auch noch die Intealisierung der Texture Variabel wichtig.
MfG Kevka