Dann hier noch wie versprochen die Lösung ohne zusätzliche Variable:
public static void Loop(int min, int max, Action<int> action)
{
if (min > max)
throw new ArgumentException("min must be lesser than or equal max");
checked
{
for (int i = min; i <= max; max = (i == int.MaxValue ? max-1 : max), i = (i == int.MaxValue ? i : i+1))
action(i);
}
}
Beim oberen Grenzfall wird einfach max dekrementiert anstatt i zu inkrementieren, damit kann die Bedingung
i ≤ max ausgewertet werden ohne Überläufe zu verursachen.
Noch kürzer ginge es so:
for (int i = min; i ≤ max; min=(i == int.MaxValue ? max-- : i++)), aber da braucht man doch wieder (in diesem Fall min) als dummy-Variable, da C# hier nur assignment, call, increment, decrement zulässt.
Christian
Edit:
Danke an Herbivore, der die letzte Variante noch optimiert hat:
for (int i = min; i <= max; i=(i == int.MaxValue ? max-- : i+1))
oder vielleicht noch besser so, damit der Normalfall vorne steht:
for (int i = min; i <= max; i=(i < int.MaxValue ? i+1 : max--))
Durch das Postdecrement von max wird im Fall i == int.MaxValue an i wieder int.MaxValue zugewiesen - i behält also bei der letzten Reinitialisierung wie gewünscht seinen (maximalen) Wert -, weil der Fall i == int.MaxValue nur eintreten kann, wenn max (ursprünglich) int.MaxValue ist.
Wenn du magst, kannst du deinen Beitrag editieren und diese Variante(n) der Vollständigkeit halber mit aufnehmen. Ich selbst werde keine Antwort schreiben, da ja schon die neue Aufgabe da ist.
Die folgende auch denkbare Variante würde ich dagegen nicht verwenden, da Inkrementoperator und Zuweisung hier doppeltgemoppelt wären:
for (int i = min; i <= max; i=(i < int.MaxValue ? ++i : max--))
Hallo,
es gibt auch eine einfache Variante, die ohne zusätzliche Variable auskommt & bei den Grenzfällen funktioniert.
Mangels einer Idee zu einer Aufgabe werde ich diese aber erst nach der Lösung posten
Christian
Hallo,
Die Links sind gefixt.
Das Verdunkeln ist im wesentlichen eine Fullscreen-Tompmost Form mit einem (abgedunkeltem) Screenshot als Hintergrundbild.
Für eine Neuentwicklung würde ich hinsichtlich Performance gefühlt jedoch eher zu WPF mit echter Transparenz greifen.
Hallo,
Danke für das feedback.
Das mit der Gesamtansicht der Hotkey-Kombinationen ist auch eine sehr gute Idee und für die nächste Version vorgemerkt.
Momentan liegt das Projekt noch auf Eis. Ich bin gerade dabei mir anhand einiger anderer Projekte WPF ordentlich beizubringen.
Danach werde ich mich aber definitiv wieder dem Screenshooter widmen.
Der erste Teil ist mal abgeschlossen. Seit diesem Herbst bin ich nun im Master-Studium
Hallo,
Schau mal unter "Tools->Options->Text Editor->C#->Formatting" (bzw. deutsches Equivalent)
Dort kannst du unter anderem das Verhalten hinsichtlich Einrückungen, Zeilenumbrüchen oder Leerzeichen festlegen.
Hi,
Eventuell könnte Netlimiter was für dich sein: http://www.netlimiter.com
Hier meine Favoriten
Spiele:
AppStore Programme:
JB Programme:
deshalb musste meine Spam-EMail-Adresse dafür herhalten 😃.
Für solche Registrierungen verwende ich immer gerne http://10minutemail.com . Damit habe ich jedes mal eine andere Email-Addresse, wo ich mir auch um Spam keine Sorgen machen muss, da es sie nur 10 Minuten gibt.
Schau mal unter [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke), dort ist das mit Invoke & BeginInvoke schön beschrieben, auch warum es bei Invoke zu einem Deadlock kommen kann.
Der Hauptunterschied ist, dass Invoke warted bist die Aktion im Gui-Thread abgeschlossen ist, und BeginInvoke dem Gui-Thread quasi sagt, mach mal die Aktion wenn du Zeit hast, und sofort weitermacht, ohne auf die Abarbeitung zu warten.
versuch mal statt Invoke mit BeginInvoke zu synchronisieren, da dies den aufrufenden Thread nicht blockiert.
Ich bin mir jetzt allerdings nicht 100%ig sicher, ob dies nicht wieder zu anderen Threadingprobs. durch das Schließen der Form kommen kann, da noch ein Update nach dem Schließen kommen kann.
Hallo,
Kann es sein, dass du in der Update - Funktion der Form ein Invoke verwendest um dich dort mit dem GUI-Thread zu Synchronisieren?
Wenn ja, kann folgendes Szenario entstehen:
Thread A ... Gui - Thread.
Thread B ... Thread der Fire Updates aufruft.
greets
Deine Implementierung scheint Probleme zu haben wenn gleiche Werte vorkommen.
Da ich dann weg muss und heute nicht mehr dazukomme mir eine Alternativlösung anzuschauen, lass ichs mal durchgehen.
Dann stell deine Aufgabe
Gut, dann bleiben wir gleich bei Iterativen Varianten.
Ich hätte gerne eine iterative Implementierung des Quicksort
Zu meiner Lösung:
Ich am iPhone ein TvH Spiel, bei dem die Scheiben immer abwechseld gefärbt sind.
Mir ist dann mal aufgefallen, dass beim optimalen Lösen niemals 2 gleichfarbige Scheiben aufeinanderliegen.
Daraus, und aus der Start-Bedingung, dass bei einer geraden Stapelhöhe zuerst auf das "Nicht-Zielfeld" gelegt werden muss und bei einer Ungeraden Stapelhöhe der erste Zug auf das Zielfeld erfolgen muss, ergibt sich der Ablauf von selbst:
Das nächste Ziel ist immer der Stein, mit einer anderen Farbe, bei dem die Breite größer ist, oder ein leeres Feld.
Wichtig ist noch, dass wenn beide Ziele möglich wären, das nicht leere Feld bevorzugt wird.
Die Quelle ergibt sich daraus, dass der zuletzt umgelegte Stein nicht bewegt werden darf + welcher andere Stein umgelegt werden kann.
Die abwechselnden Farben repräsentieren bei mir die Scheibenbreite % 2
Ich habe noch einen Ablauf eines 3er und 4er turms in den Anhang gegeben, zum besseren Verständnis des "Farb - Systems"
Nachtrag: Ich sehe gerade, bei meinem algo könnte man den ersten Zweig des ifs ( if (sticks[(i + 1) % sticks.Length].Count == 0 && sticks[(i + 2) % sticks.Length].Count == 0) {) komplett aus den Schleifen herausziehen, da es nur beim ersten Durchlauf true sein kann. Dann wäre der Algo eventuell auch etwas verständlicher.
Ich hatte es sinngemäs so verstanden: Keine Stacks um die Rekursive Variante iterativ zu implementieren.
Aber gut, dann hier das ganze mit Listen
static void Main(string[] args) {
for (int i = 1; i < 7; i++) {
Console.WriteLine("== {0} =============================", i);
Move(i);
}
}
static void Move(int n) {
List<int>[] sticks = new List<int>[3];
for (int i = 0; i < sticks.Length; i++) {
sticks[i] = new List<int>();
}
//Fill Stick 1
for (int i = n; i > 0; i--) {
sticks[0].Add(i);
}
int lastTargetStick = -1;
while (sticks[0].Count > 0 || sticks[1].Count > 0) {
for (int i = 0; i < sticks.Length; i++) {
if (lastTargetStick != i && sticks[i].Count > 0) {
if (sticks[(i + 1) % sticks.Length].Count == 0 && sticks[(i + 2) % sticks.Length].Count == 0) {
if (sticks[i].Count % 2 == 0) {
lastTargetStick = (i + 1) % sticks.Length;
} else {
lastTargetStick = (i + 2) % sticks.Length;
}
Console.WriteLine("Nr. {0} von {1} nach {2}", sticks[i][sticks[i].Count-1], i + 1, lastTargetStick + 1);
sticks[lastTargetStick].Add(sticks[i][sticks[i].Count-1]);
sticks[i].RemoveAt(sticks[i].Count - 1);
break;
} else {
if (sticks[(i + 1) % sticks.Length].Count > 0 && sticks[i][sticks[i].Count - 1] > sticks[(i + 1) % sticks.Length][sticks[(i + 1) % sticks.Length].Count -1] &&
sticks[(i + 2) % sticks.Length].Count > 0 && sticks[i][sticks[i].Count - 1] > sticks[(i + 2) % sticks.Length][sticks[(i + 2) % sticks.Length].Count - 1]) {
continue;
}
if ((sticks[(i + 1) % sticks.Length].Count == 0 || sticks[i][sticks[i].Count - 1] < sticks[(i + 1) % sticks.Length][sticks[(i + 1) % sticks.Length].Count - 1]) &&
(sticks[(i + 1) % sticks.Length].Count > 0 && sticks[i][sticks[i].Count - 1] % 2 != sticks[(i + 1) % sticks.Length][sticks[(i + 1) % sticks.Length].Count - 1] % 2 ||
sticks[(i + 2) % sticks.Length].Count > 0 && sticks[i][sticks[i].Count - 1] % 2 == sticks[(i + 2) % sticks.Length][sticks[(i + 2) % sticks.Length].Count - 1] % 2 ||
sticks[(i + 2) % sticks.Length].Count > 0 && sticks[i][sticks[i].Count - 1] > sticks[(i + 2) % sticks.Length][sticks[(i + 2) % sticks.Length].Count - 1])) {
lastTargetStick = (i + 1) % sticks.Length;
} else {
lastTargetStick = (i + 2) % sticks.Length;
}
Console.WriteLine("Nr. {0} von {1} nach {2}", sticks[i][sticks[i].Count - 1], i + 1, lastTargetStick + 1);
sticks[lastTargetStick].Add(sticks[i][sticks[i].Count - 1]);
sticks[i].RemoveAt(sticks[i].Count - 1);
break;
}
}
}
}
}
Als Fan von Türme von Hanoi musst ich es natürlich gleich probieren.
Hier meine Lösung:
static void Main(string[] args) {
for (int i = 1; i < 7; i++) {
Console.WriteLine("== {0} =============================", i);
Move(i);
}
}
static void Move(int n) {
Stack<int>[] sticks = new Stack<int>[3];
for (int i = 0; i < sticks.Length; i++) {
sticks[i] = new Stack<int>();
}
//Fill Stick 1
for (int i = n; i > 0; i--) {
sticks[0].Push(i);
}
int lastTargetStick = -1;
while (sticks[0].Count > 0 || sticks[1].Count > 0) {
for (int i = 0; i < sticks.Length; i++) {
if (lastTargetStick != i && sticks[i].Count > 0) {
if (sticks[(i + 1) % sticks.Length].Count == 0 && sticks[(i + 2) % sticks.Length].Count == 0) {
if (sticks[i].Count % 2 == 0) {
lastTargetStick = (i + 1) % sticks.Length;
} else {
lastTargetStick = (i + 2) % sticks.Length;
}
Console.WriteLine("Nr. {0} von {1} nach {2}", sticks[i].Peek(), i+1, lastTargetStick+1);
sticks[lastTargetStick].Push(sticks[i].Pop());
break;
} else {
if (sticks[(i + 1) % sticks.Length].Count > 0 && sticks[i].Peek() > sticks[(i + 1) % sticks.Length].Peek() &&
sticks[(i + 2) % sticks.Length].Count > 0 && sticks[i].Peek() > sticks[(i + 2) % sticks.Length].Peek()) {
continue;
}
if ((sticks[(i + 1) % sticks.Length].Count == 0 || sticks[i].Peek() < sticks[(i + 1) % sticks.Length].Peek()) &&
(sticks[(i + 1) % sticks.Length].Count > 0 && sticks[i].Peek() % 2 != sticks[(i + 1) % sticks.Length].Peek() % 2 ||
sticks[(i + 2) % sticks.Length].Count > 0 && sticks[i].Peek() % 2 == sticks[(i + 2) % sticks.Length].Peek() % 2 ||
sticks[(i + 2) % sticks.Length].Count > 0 && sticks[i].Peek() > sticks[(i + 2) % sticks.Length].Peek())) {
lastTargetStick = (i + 1) % sticks.Length;
} else {
lastTargetStick = (i + 2) % sticks.Length;
}
Console.WriteLine("Nr. {0} von {1} nach {2}", sticks[i].Peek(), i+1, lastTargetStick+1);
sticks[lastTargetStick].Push(sticks[i].Pop());
break;
}
}
}
}
}
}
Ich hoffe Stacks als Repräsentation der Stäbe sind erlaubt, sonst baue ich es noch um auf Arrays.
Mach mal aus den beiden Invokes, jeweils ein BeginInvoke.
Invoke wartet ja bekanntlich darauf, dass der GUI Thread bereit ist eine Aktion auszuführen und führt die die Aktion dann im GUI Thread und warted bis diese fertig ist.
Nun ist aber dein GUI Thread Blockiert und und wartet darauf das die Thread-Methode den Lock aufhebt. Ergo Deadlock.
Irgendwo gabs hier ma
Also spontan fallen mir*Google Earth *iTunes Musikshop *Online Poker Clients *Diverse Onlinespiele
ein.
Nein, bei denen ist es doch jetzt erst ~7 Uhr morgens
edit: ich meine 6 Uhr,
also bei uns müsste es um 2 Uhr Morgens losgehen
Es ist so weit:
Laut Blog von Wolfram Alpha geht es heute Nacht mit einem Live-Webcast los, an dessen Ende WA Online sein soll:
We’ll be making our first attempt to go live with Wolfram|Alpha this Friday evening, May 15. We’ll start webcasting our preparations at 7pm CDT (UTC -5). We’ll work through checklists, do a final test of our infrastructure—and then, if all goes well, within an hour or two we’ll have Wolfram|Alpha live on the public web for the first time. Along the way, we’ll include behind-the-scenes views of what it’s taken to create Wolfram|Alpha.
(Quelle: http://blog.wolframalpha.com/2009/05/12/going-live-and-webcasting-it/)
Der Eintrag ist von Dienstag, und auch im gestrigen wird nochmal bastätigt, das WA heute online gehen soll.
Hier noch der Link zum Webcast: http://www.justin.tv/wolframalpha
greets
Hi,
Hier hat Paul Welter in seinem Blog ein XML-Serialisierbares Dictionary veröffentlicht.
Damit müsste es dann auch mit dem XML-Serializer funktionieren.
greets
Die Logik dahinter ist wahrscheinlich, dass Strg+Shift+U in Uppercase wandelt.
Hier gibts so eine Challenge mit Schiffe-Versenken KIs
Da wäre es vermutlich einfacher / billger eine Wii-Mote(kostet ca. 50€) dafür zu verwenden.
Hier gibt es zudem schon eine Bibliothek um Lagesensoren, IR-Cam, Tasten per .Net auszulesen.
Sorry, es war nicht portmap.port sondern tcp.port == ...
Hi,
Wireshark ist denke ich genau was du suchst.
(Bei Filter noch portmap.port == deinport und fertig)
greets
Da der Operator hier in keiner Klasse ist wird ein Linkes und ein Rechtes Argument benötigt
2/3/4 Der Operator hier ist ausserhalb einer Klasse -> kein this, er ist nicht private, nur die Methode (bzw. der Operator) erhalten zugriff.
Man könnte ihn in-Place Implementieren oder einfach auch mit ins Cpp file und halt ohne Classname::
Man könnte es mit einer extention Method von C# vergleichen, wo der std::stream um eine Überladung des << Operaors erweitert wird und der Parameter stream quasi das this bei der extention Method wäre.
stdostream & operator << (stdostream & stream, A const & a)
A a1, a2;
cout << a1 << a2;
// | | |
//stream a |
//\___________/ |
// | |
// stream a
greets
PS:
const int* pInt=0; int a=5; pInt=&a; for(int i=0;i<10;i++) { cout<<pInt[i]<<"\n"; }
Ich hoffe dir ist klar das du damit schon zwangsläufig eine Zugriffsverletzung hast.
Hab noch nicht ernstzunehmend mit Managed C++ gearbeitet, was ich aber bisher gesehen habe ist es wirklich eine Perversion.
Wie gesagt musst du die meisten Systemincludes ohne .h angeben
(Unter VisualStudioInsterlationsverzeichniss\VC\include sieht man auch, dass iostream, string, ... kein .h als Endung haben)
Hi
class A {
private:
int m_A;
friend inline std::ostream & operator <<
(std::ostream & stream, A const & a);
};
...
//.Cpp:
std::ostream & operator << (std::ostream & stream, A const & a){
stream << "A: " << a.m_A;
return stream;
//...
A a;
cout << a;
}
was mir weiterhin rätselhaft, bzw. nicht sinnvoll vorkommt, ist, dass C++ Polymorphie nur auf Zeigern (und Referenzen?) unterstützt
Das ist doch in C# auch nicht anders, nur dass hier bei Klassen immer gleich automatisch die Referenz gespeichert wird.
Die Anzahl der Elemente in Arrays weis ich auch nicht wo das beim allokieren im hintergrund gespeichert wird, man hat jedenfalls keine Möglichkeit darauf zuzugreifen.
int main()
{
int* Werte=new int[3];
\*Werte=2; //erstes Objekt=2
\*(Werte+1)=3; //2. Objekt=3//geht das? ... JA (stichwort Pointerarithmetik)
delete [] Werte; //er löscht alle, also muss er wissen, wie viele es sind.
//speichert er diese Anzahl irgendwo?
//und wenn ein Array ein Zeiger ist, ist ein Zeiger auch ein Array, oder?
int a=5;
int* pa=&a;
cout<<pa[0]; //geht das? JA
return 0;
}
cout nimmt er nicht, da du den wahrscheinlich den std nicht eingebunden hast
also:
#include <iostream> //hier ohne .h
using namespace std;
int main () {
greets
HI,
Einfach die Dateiendung von .cpp auf .c ändern, dann wird meines Wisses der C Compiler verwendet.
greets
Hi,
Ich hatte selbst mal versucht, das InotifyPropertyChanged auf basis dieses Threads zu verallgemeinern. Ich habe dabei den Property-Name mittels folgenden Code ermittelt.
Allerdings habe ich diese Methode wieder verworfen, da sie ca. !!500!! mal länger dauert.
public class Test : INotifyPropertyChanged, INotifyPropertyChanging {
public event PropertyChangingEventHandler PropertyChanging;
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) {
if (PropertyChanged != null) PropertyChanged(this, e);
}
protected virtual void OnPropertyChanging(PropertyChangingEventArgs e) {
if (PropertyChanging != null) PropertyChanging(this, e);
}
protected bool Notify<T>(ref T oldValue, T newValue) {
StackTrace trc = new StackTrace();
MethodBase calling = trc.GetFrame(1).GetMethod();
if (!calling.IsSpecialName || !calling.Name.StartsWith("set_"))
throw new Exception("Calling Method is not a setter of a Property");
PropertyInfo pi = this.GetType().GetProperty(calling.Name.Substring(4));
return Notify(pi.Name, ref oldValue, newValue);
}
protected bool Notify<T>(string propertyName, ref T oldValue, T newValue) {
if (oldValue == null && newValue == null) {
return false;
}
if ((oldValue == null && newValue != null) || !oldValue.Equals((T)newValue)) {
OnPropertyChanging(new PropertyChangingEventArgs(propertyName));
oldValue = newValue;
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
return true;
}
return false;
}
private int m_A;
public int A {
get { return m_A; }
set { Notify(ref m_A, value); }
}
private int m_B;
public int B {
get { return m_B; }
set { Notify("C", ref m_B, value); }
}
}
Hi,
Hier findest du eine Implementierung der Fuinktion: http://bilgin.esme.org/BitsBytes/ProgrammersBlog/Articles/DAYS360Function/tabid/179/Default.aspx
greets
Edit:
So habe es nun mit Windows Mobile Device Center 6.1 probiert, das iPhone wird jedoch NICHT erkannt.
Das abgleichen von Emails/Kontakten mit Outlook läuft auch, wie bereits erwähnt, mittels iTunes.
(Solltest du für das iPhone an einer Alternatievlösung für den Dateizugriff interessiert sein, könnte folgendes hilfreich sein: http://code.google.com/p/manzana/ (ist ein C# Wrapper für die dll mit der iTunes auf das Handy zugreift. Das muss aber meines wissens gejailbreakt sein damit das funktioniert)
Hi,
ich habe eines, muss dich aber enttäuschen, es gibt derzeit noch keine Möglichkeit WindowsMobile oder CompactFramework Apps auf dem iPhone laufen zu lassen.
Wäre ja auch irgendwie eigenartig wenn Apple auf seinem Handy WindowsMobile verwendet. 😉
(auch der Sync läuft über iTunes und nicht über Activesync).
Das Entwickeln (offizieller) Apps geht nur mit dem SDK von Apple, welches nur für den Mac verfügbar ist.
Es wurde zwar in der Zwischenzeit schon so weit "gehacked", dass ein Linux-Kernel drauf zum laufen gebracht wurde, aber bis das Alltagstauglich ist wird wohl noch einige Zeit vergehen.
Das es in Absehbarer Zeit eine Möglichkeit geben wird CF - Apps auf dem iPhone laufen zu lassen halte ich für sehr unwahrscheinlich.
greets
Alternativ diese hier: http://sourceforge.net/project/screenshots.php?group_id=110642
Hallo,
Das Problem mit dem Merken des Dateiformats ist gefixt.
Was das Überspeichern angeht (meinst du damit das Ersetzen einer vorhandenen Datei?), kann ich das Problem nicht nachvollziehen, das klappt bei mir einwandfrei.
@JBeh: Sorry, hatte deinen Post leider übersehen, mir wäre aber kein Grund bekannt warum es unter Vista 64-bit nicht funktionieren sollte, habe allerdings auch nur die 32-bit Version zum Testen.
greets
PS: Download wie immer im Ursprungspost
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);
Console.Beep();
}
}
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)
{
this.value=value;
this.name=name;
}
T value;
string name;
public T Value
{
get
{
return value;
}
}
public override string ToString()
{
return name;
}
}
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));
System.Drawing.Point p = new System.Drawing.Point(Width / 2, 0);
e.Graphics.DrawLines(new System.Drawing.Pen(System.Drawing.Color.Red, 10f), new System.Drawing.Point[]{
new System.Drawing.Point(p.X,
p.Y),
new System.Drawing.Point(p.X += (int)(Math.Sin(Math.PI/10.0)*(Width > Height ? Height : Width)),
p.Y += (int)(Math.Cos(Math.PI/10.0)*(Width > Height ? Height : Width))),
new System.Drawing.Point(p.X -= (int)(Math.Cos(Math.PI/ 5.0)*(Width > Height ? Height : Width)),
p.Y -= (int)(Math.Sin(Math.PI/ 5.0)*(Width > Height ? Height : Width))),
new System.Drawing.Point(p.X += (Width > Height ? Height : Width),
p.Y),
new System.Drawing.Point(p.X -= (int)(Math.Cos(Math.PI/ 5.0)*(Width > Height ? Height : Width)),
p.Y += (int)(Math.Sin(Math.PI/ 5.0)*(Width > Height ? Height : Width))),
new System.Drawing.Point(p.X += (int)(Math.Sin(Math.PI/10.0)*(Width > Height ? Height : Width)),
p.Y -= (int)(Math.Cos(Math.PI/10.0)*(Width > Height ? Height : Width)))});
base.OnPaint(e);
}
}
}
Hi,
Der Source ist in einem SVN - Repository, das müsste man mit z.B.: TortoiseSvn auschecken.
Ich habe aber den Link oben auf ein rar - Archiev geändert. Bei dem könnte es aber sein, dass es nicht immer ganz aktuell ist.
greets
Würde mich auch interessieren obs das noch wo gibt,
Ich habe mir gestern alles heruntergeladen und heute morgen kam das böse erwachen:
bei der Installation: Teil 3 & 4 habe CRC - Fehler und keine Möglichkeit zum neu herunterladen
greets dechavue
Hi,
Falls du mit .Net3.5 arbeitest könntest du Extention Methods verwenden, damit kannst du eigene Methoden zu Datetime hinzufügen.
Aber schau dir vorher mal, wie schon erwähnt, die Formatierungsmöglichkeiten von .ToString() an, vielleicht genügt das ja schon für deine Zwecke
greets
Es ist soweit, Version 2.1 ist da.
Änderungen in dieser Version:
Weiters habe ich beim Pluginsystem das Laden in eine eigene App-Domains entfernt, da es mir mehr Probleme als Nutzen gebracht hat (insbes. Einstellungsdialoge). Das Laden/Entladen von PLugins durch Hinzufügen/Löschen der Files im Pluginverzeichnis ist jedoch weiterhin möglich.
Ansonsten gab es nur noch ein paar kleinere Bugfixes.
Nennenswerte Performanceverbesserungen habe ich nicht durchgeführt, da ich vermutlich in einer der nächsten Versionen auf WPF umsteige.
Download mit Link aus Anfangspost.
greets
PS: fast hätte ichs Vergessen, ein Neues Plugin ist auch dabei: EPS-Export. Dies kann beim Arbeiten mit LaTeX hilfreich sein.
Hi,
Ich habe bemerkt, dass es Funktioniert wenn man direkt über die Board-ID zugreift, also bis Herbivore es fixt, hier die IDs aus meinem Verlauf (Bitte vervollständigen wenn was fehlt)
http://www.mycsharp.de/wbb2/board.php?boardid=24
http://www.mycsharp.de/wbb2/board.php?boardid=25
http://www.mycsharp.de/wbb2/board.php?boardid=28
http://www.mycsharp.de/wbb2/board.php?boardid=29
http://www.mycsharp.de/wbb2/board.php?boardid=33
http://www.mycsharp.de/wbb2/board.php?boardid=37
http://www.mycsharp.de/wbb2/board.php?boardid=50
http://www.mycsharp.de/wbb2/board.php?boardid=57
http://www.mycsharp.de/wbb2/board.php?boardid=59
http://www.mycsharp.de/wbb2/board.php?boardid=67
http://www.mycsharp.de/wbb2/board.php?boardid=69
http://www.mycsharp.de/wbb2/board.php?boardid=70
http://www.mycsharp.de/wbb2/board.php?boardid=71
http://www.mycsharp.de/wbb2/board.php?boardid=73
http://www.mycsharp.de/wbb2/board.php?boardid=75
http://www.mycsharp.de/wbb2/board.php?boardid=77
http://www.mycsharp.de/wbb2/board.php?boardid=78
http://www.mycsharp.de/wbb2/board.php?boardid=81
http://www.mycsharp.de/wbb2/board.php?boardid=85
http://www.mycsharp.de/wbb2/board.php?boardid=86
greets
Hi,
Ich weis leider nicht wie es sich mit vorhandenen Lizenzen und der Installation in einer virtuellen Maschine verhält,
aber hier kann man sich sowohl Windows XP als auch Windows Vista als fertige Installation für VirtualPC herunterladen.
(Ich nutze diese XP - Installationen gerne zum testen meiner Programme unter XP, da ich nur noch Vista installiert habe)
greets
An alle Helfer: http://www.mikrocontroller.net/topic/113228
Hi,
Danke, Manchmal hat man es zu dicht vor den Augen. (Hatte TinyXML sogar schon heruntergeladen).
Meine Tests sehen auf jeden Fall nun vielversprechend aus.
thx dechavue
Hi,
Ich bin gerade in der Situation, dass ich Dateien zwischen C# und einer native C++ - Applikation austauschen muss. Aus Sicht von C# würde sich XML - Serailisierung anbieten (Lesen+Schreiben), das Problem ist jedoch das Lesen auf C++ Seite (Nur Lesen).
Ich wollte euch fragen ob jemand von euch einen (freien) XML - Parser für C++ kennt, der mit der Serialisierung von .Net kompatibel ist?
Ihr würdet mir damit viel Arbeit ersparen, das genze File manuell zu parsen.
Danke im Voraus,
dechavue
Hi,
Vielen Dank für die Verbesserungsvorschläge.
Momentan ist das durchführen des Screemshots über den Menüpunkt, mittels Doppelclick auf das Icon bzw mit Strg+Druck möglich.
Was nun für die Zukunft auf meiner ToDo Liste steht:
greets
Im Moment ist noch alles Hard - Codierd auf Englisch, aber ich überlege ob ich es in einer der nächsten Versionen Lokalisierbar mache.
Ansonsten ist ja der Source vorhanden, wenn du es schon früher Deutsch brauchst.
Hi,
Danke für die Rückmeldung
Der Fehler trat genau dann auf, wenn wärend des FadeIns die Form schon wieder geschlossen wurde (z.B.: durch rechtsclick)
Sollte nun gefixt sein.
Auch allen anderen Danke für die positive Rückmeldung, sowas hört man gerne 🙂
greets
Hi,
Ich möchte euch ein kleines Tool von mir Vorstellen, den Screenshooter.
Begonnen hat das Projekt vor ~1Jahr mit dem V1 (welcher nie aus dem internen Betastadium herausgekommen ist)
Nun, nach einer langen Pause ist die komplett neue Version 2 endlich fertig.
Hier nun einige Features:
• Bildschirm abgedunkelt, ausgewählter Bereich erhält andersfarbiges Overlay.
• Individuell einstellbare Farben / Transparenzen für Cursor, Auswahlrechteck, sowie Overlays für den Aktiven / Inaktiven Bereich.
• Plugin - Basiert: Die Kernapplikation erzeugt lediglich den Screenshot, mittels Plugins kann dieser dann weiterverarbeitet werden (Hier mein Dank an Neurocoder für das zur Verfügung stellen seines Pluginsystems)
• HotKey mit Ctrl+PrintScreen
• Autostart möglich
• Animationen beim Abdunkeln / Anzeigen des Pluginauswahlmenüs
• Folgende Modi stehen für das Aufnehmen eines Screenshots zur Verfügung:
Ø Kurzer Klick: Startpunkt wird festgelegt & Auswahlrechteck wird angezeigt, erneuter Klick nimmt Screenshot auf
Ø Maus Halten & Ziehen, Auswahlrechteck wird gezogen, loslassen der Maus nimmt Screenshot auf.
Ø Ctrl + Linksklick: Screenshot vom aktuellen Monitor wird erstellt
Ø Alt + Linksklick: Screenshot von allen Monitoren wird erstellt (wie Printscreen Taste)
Ø Mittlere Maustaste Klick: Ein Screenshot vom (Child)Window an der Mausposition wird erstellt ( drückt man die Maustaste z.B.: über der Textarea im Visual Studio wird auch nur diese aufgenommen, beim Click auf die Titelleiste wird das gesamte Fenster genommen)
Plugins:
Zurzeit stehen Folgende Plugins zur Verfügung:
• Copy: Kopiert den Screenshot in die Zwischenablage
• Edit: Speichert den Screenshot temporär und öffnet ihn mit dem standard Bildbearbeitungsprogramm.
• Email: Öffnet eine Neue Email mit dem Screenshot als Anhang
• Print: Druckt den Screenshot aus
• Save: Speichert den Screenshot je nach Einstellung fortlaufend nummeriert oder mit Datum/Zeitstempel in einen einstellbaren Ordner.
• SaveAs: Öffnet einen Speichern Dialog
• Watermark: Fügt dem Screenshot ein einstellbares Wasserzeichen hinzu. Anschließend kann ein weiteres Plugin auf den modifizierten Screenshot angewandt werden.
PluginBase:
Zuerst möchte ich bei der Entwicklung von Plugins empfehlen, die Templates zu verwenden Dadurch ist man im Plugin von den Appdomain Spielereien quaso völlig abstrahiert. Zudem wird einem das Laden/Speichern von Einstellungen nahezu komplett abgenommen.
Zusätzlich bietet die PluginBase Assembly noch eine statische Klasse zum Speichern von Bildern an (da dies häufig benötigt wird)
Die AppBomainBitmaps im Property Icon und im übergebenen Screenshot überladen die operatoren auf Bitmap und können so wie ein normales Bitmap verwendet werden.
Known Bugs:
• Beim Wechseln zu einer Einstellungsseite eines nachträglich geladenen Plugins hängt sich das Programm auf. (Ich werde natürlich versuchen das noch zu fixen, da jedoch ab nächster Woche das Studium wieder beginnt, weiß ich leider nicht wann ich Zeit finde)
Download:
Da ich die Archive leider nich auf 256kB heruntergebracht habe, hier die Downloads (Liegt auf einem FH-Server, sollte daher ziemlich dauerhaft sein):
Executeable
Source Applikation
Source Plugins
Source SVN
Screenshots: