Laden...
S
Stu42 myCSharp.de - Member
Softwareentwickler Aus dem Norden Dabei seit 15.10.2006 506 Beiträge
Benutzerbeschreibung

Forenbeiträge von Stu42 Ingesamt 506 Beiträge

02.03.2010 - 15:54 Uhr

Vorschlag:

Drag Modus Start:

  1. Alle Controls die zu verschieben sind mit "DrawToBitmap()" rendern.
  2. Controls verstecken, und nur die vorgezeichneten Bitmaps anzeigen, somit
    kannst du eine "Auswahlrotine schreiben" mit der du die Controls selektieren kannst.
  3. Beim eigenlichen "Drag" verhsciebst du dann nur die die Rechtecke, bzw. die Bilder.
  4. Beim Drag-Ende die Controls an der geänderten Position anzeigen.
02.03.2010 - 11:11 Uhr

Vorschlag 1: Du berechnest dir die Punkte der Gerade, und prüfst mir IsVisible für Kollision. Dieser weg wäre einfach, aber CPU lastig.

Vorschlag 2: Du speicherst dir die Punkte deines Parallelogramms, und berechnest die Schnittpunkte der 4 Seiten (jede Seite ist ja eine Linie). Die Schnittpunktberechnung kannst du z.B. durch Gleichsetzen der beiden Liniarfunktionen durchführen.

01.03.2010 - 16:04 Uhr

z.B. GraficPath.GetBounds().IntersectWitdh(...) .

Würde sich aber auf komplette Rechteck des Pfades beziehen.

01.03.2010 - 12:05 Uhr

Ich hab sowas auch mitm ZedGraph gemacht.

11.02.2010 - 13:48 Uhr

http://en.wikipedia.org/wiki/ClearType

Wenn ich das richtig verstanden habe, kann ClearType nur direkt auf den Bildschirm gezeichnet werden, da man die Position der Subpixel benötigt, in der Bitmap aber nur die ganzen Farbwerte gespeichert werden.

11.02.2010 - 13:28 Uhr

Das mit dem AntiAlias geht zwar, aber die Kantenglättung wird nicht mitgezeichnet. Die Schrift sieht so immer noch Kantig aus.

[Edit]
Das mit dem AntiAlias geht. Hatte AntialiasGridFit vorher eingestellt.

Aber warum geht es nicht mit dem ClearType?

11.02.2010 - 11:37 Uhr

Ob TextRenderer oder DrawString macht kein Unterschied, es passiert das Selbe.

Der TextRenderer kann auch keinen Text mit transparenten hintergrund normal auf die Form zeichnen.


TextRenderer.DrawText(g, "Test", Font, new Point(0, 0), Color.Black,Color.Transparent);

11.02.2010 - 11:14 Uhr

Wenn ich die Schrift auf ein transparentes Bitmap zeichne, und diese dann auf die Form, dann sieht es so aus wie im oberen Bild (angehängte Datei).

Stelle ich den Hintergrund der Bitmap auf Weiß, wird die Schrift richtig gezeichnet.

11.02.2010 - 08:44 Uhr

leicht ist das Problem sicherlicht nicht. Mit dem Window TabControl hab ich sowas auch noch nicht gesehen, wahrscheinlich weil es einfacher ist, sich ein eigenes TabControl zu machen, als das bestehende zu verändern.

11.02.2010 - 08:40 Uhr

Hallo!

Ich möchte mir Bilder in éiner Bitmap (Hintergrund ist transparent) vorrendern. Dabei stoße ich immer wieder auf das Problem, das die Transparenz vom Antialiasing (z.B. vom Schriftrendern) nicht korrekt gezeichnet wird.

Hier ist ein Beispielcode:


private void OnPaint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            Bitmap b = new Bitmap(100, 100,  System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            using (Graphics gb = Graphics.FromImage(b))
            {
                gb.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
                gb.DrawString("Test", Font, Brushes.Black, 0, 0);
            }

            g.DrawImage(b, 0, 0);
        }

Kann ich Schriften auf einem transparenten Hintergrund nicht korrekt vorrendern?

Schöne Grüße,
Jan

14.04.2009 - 16:09 Uhr

Hi!

Warum willst du denn 28000 Grafen einfügen?

Ich gehe richtig in der Annahme, du willst einen Graph mit 28000 Punkte zeichnen?

Dann musst du dir eben nur einen Graph (LineItem) machen, und diesem dann 28000 punkte einfügen.

[Edit]
Hab gerade gelesen du willst wirklich 28000 Grafen einfügen...
Die Vorgehensweise ist aber falsch! du kannst doch nicht 28000 Grafen einfügen...

Wenn dir die vorgegebenen Darstellungsoptionen nicht reichen, musst du den Grafen halt selbst zeichnen (von CurveItem erben).

03.04.2009 - 13:41 Uhr

ah, irgendwie hat das alles nicht Funktioniert....

Nun hab ich mit "is Array" gemacht.

Danke für eure Antworten.

03.04.2009 - 10:49 Uhr

Naja das ändert aber auch nichts an dem Problem, das ich nicht auf IEnumerable<T> abfragen kann, sondern nur auf IEnumerable<spezieller typ>.

03.04.2009 - 10:19 Uhr

Doch, der aktuelle Wert stet immer in Axis.Scale.Max.

Eventuell ist was anderest falsch.

03.04.2009 - 10:08 Uhr

Hallo,

ich bastel mir gerade einen Online Debugger mittels Reflection.

Nun habe ich ein Object bei dem ich schauen will, ob es eine Liste , oder ein Array ist etc...

Also möchte ich abfragen, ob das object ein IEnumerator ist. Das Problem ist nur , das ich bei dem IEnumerator immer den Templatetyp mit angeben muss.

Also z.B.:

object o;
if(o is IEnumerator<int>) ...

Kann ich nicht Abfragen, ob ein Typ ein IEnumerator<T> ist?

Schöne Grüße,
Stu

26.03.2009 - 13:56 Uhr

Hallo,

ich habe von einer ComboBox geerbt, um die DropDownItems selbst zu zeichnen.

Funktioniert auch alles Prima. Nur wenn man mit der Maus auf das letze angezeigt Element kommt, scrollt die DropDownList bis ganz nach unten.

Nun hab ich schon nach einer Eigenschaft gesucht um das Scrollen abzuschalten, nur leider nichts gefunden.

Hat jemand von euch vielleicht eine Idee, wie man das automatische Scrollen abschalten kann?

Schöne Grüße, Stu

22.03.2009 - 19:37 Uhr

MemoryStream....

Du speicherst dein BMP als PNG in einen Memory stream....

13.01.2009 - 10:28 Uhr

Soweit habe ich das auch verstanden. Habe meine Frage nicht gut formuliert.

Man kann dort doch auch z.B. angeben: [TARGETDIR], welches dann durch das Programmverzeichnis ersetzt wird.

Gibt es auch eine "VisualStudio"-Variable für den Pfad des Installers? (Von wo aus die Setup.exe gestartet wird)

13.01.2009 - 09:56 Uhr

Hallo,

in dem .NET Installer (Setup Projekt) kann ich ja z.B. bei "Installieren" eine *.exe angeben, die dann während der Installation aufgerufen wird.

Wenn ich nun die Eigenschaften von dem ding öffne, gibt es dort eine Zeile "Argumente".
Was kann ich dort alles angeben?

Ich möchte mir ein Programm bauen, was während der Installation aufgerufen wird, und vom StartupPath des Installers noch einige Dateien kopiert.
Dazu muss ich aber den Ornder vom Installer wissen.

Gruß, Stu

07.01.2009 - 15:57 Uhr

Hallo,

wenn ich Texturen auf Sprites mit DirectX Zeichne, kann ich dafür auch eine Clip-Region verwenden?

Wenn ja , wie?

Oder muss ich mir die komplette Textur als Bitmap erzeugen, um dann die ClipRegion der GDI+ verwenden zu können?

Schöne Grüße, Stu

23.12.2008 - 09:01 Uhr

Perfekt.

Vielen dank, der Beitrag hat mir sehr gehohlfen.

Ist jetzt nur geraten, aber aus dem Vektor (0|0|0) sollte doch auch (0|0) herauskommen.

der Vector(0|0|0) ist der Ursprung des Koordinatensystems, standardmäßig in der Mitte des DirectX Fensters liegt.

22.12.2008 - 15:35 Uhr

Hallo,

ich habe einen Vector3 und möchten diesen in Bildschirmkoordinaten umrechnen, damit ich dort einen 2D Text hinschreiben kann.

Nun hab ich mich schlau gemacht, und gelesen das die Umrechnung wie folgt funktioniert.

2D-Punkt = 3D-Punkt * WorldMatrix * ViewMatrix * ProjectionMatrix;
dann X und Y durch W teilen und auf den Bildshirmskalieren.

Mein Code



_Device.Transform.World = Matrix.Translation(0, 0, 0);
_Device.Transform.View = Matrix.LookAtLH(new Vector3(2, 2, 2), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
_Device.Transform.Projection = Matrix.OrthoLH(5, 5, 1, 10);

Vector3 p = new Vector3(0, 0, 0); //Koordinaten Ursprung
p.TransformCoordinate(_Device.Transform.World);
p.TransformCoordinate(_Device.Transform.View);

Vector4 zwichen = new Vector4(p.X, p.Y, p.Z, 1); //aus der verrechnung mit der Projectionmatrize kommt ein Vector4 heraus
zwichen.Transform(_Device.Transform.Projection);

Vector2 v = new Vector2(zwichen.X / zwichen.W, zwichen.Y / zwichen.W);

Bei der Berechnung ist "v" leider immer 0. Was mache ich falsch?

Schöne Grüße,
Stu

31.10.2008 - 13:47 Uhr

Meinst du, daß sich bei dir die Einträge in der DropDown-Liste ändern, während du sie geöffnet hast?

Richtig.

Aber wenn ich 10 Items habe die alle nacheinander aktualisiert werden, würde die DropDownListe ja 10 mal wieder auf un zu gehen.

31.10.2008 - 10:27 Uhr

Hallo,

gibt es eine Möglichkeit die DropDownList einer Combo zu "invalidieren"?
Denn mit Invalidate wird nur die ComboBox ansich neu gezeichnet.

Gruß Stu

30.10.2008 - 11:38 Uhr

Ahja, das ist ne sehr gute Idee. So werde ich es machen. Vielen Dank.

30.10.2008 - 11:18 Uhr

Wozu ? Es gibt doch schon eine fertige Vorschau.

Da hab ich die Ausgabe aber nicht in Form eines Image´s.

dafür kannst du ja das Graphics-Objekt statt aus den PrintPageEventArgs von einer vorher erzeugten Bitmap nehmen. Dann landet die Druckausgabe in einem Bild.

Ja daran hab ich auch schon gedacht. Ist aber unschön weil ich dann die Print routine kopiern muss, und dann ist alles doppelt. Wäre halt schön wenn es auch anderst gegangen wär.

30.10.2008 - 10:41 Uhr

Hallo,

ich habe ein PrintDocument. Nun möchte ich aber das, was voraussichtlich gedruckt wird als Vorschau anzeigen. Kann ich die Druckausgabe irgendwie auf ein Bild umleiten? (wie der PrintPreviewDialog)

Gruß Stu

28.10.2008 - 11:25 Uhr

Warum sollte das unter Vista nicht so lange brauchen?

Wie funktioniert das denn mit den Zeichnen? Unter der GDI wird doch erstmal alles in den normalen speicher geladen, und dann irgentwann umgeflippt.

Wäre es nicht möglich das Windows Vista Grafiken direkt zur Grafikkarte überträgt, und dass das Neuzeichnen (Invalidate()) dann auf kosten der Grafikkarte geht?

28.10.2008 - 11:04 Uhr

Das man aufwendigen Grafikkrams anderst lösen sollte, sollte jedem klar sein.

Aber nehmen wir mal die Funktion Invalidate().
Wenn ich alles neuzeichne dauert das ja "länger", also wenn ich Invalidate(Rectanlge) aufrufe.

Bei Invalidate(Rectanlge) werden die Paint Funktionen aber auch alle durchlaufen wie beim normalen Invalidate.

D.h. doch, dass das "Auf-den-bildschirm-zeichnen" schon recht lange dauert. Und genau das sollte ja mit Vista beschleunigt sein.

28.10.2008 - 10:53 Uhr

Hallo,

die API wurde unter Vista ja mit DirectX beschleunigt. Würde das auch heißen, das die GDI+ beim zeichnen schneller ist? Bzw dass das Zeichnen mehr von der Grafikkarte übernommen wird? (unter Vista)

Gruß Stu

16.10.2008 - 10:13 Uhr

ah vielen Dank...

Ich habe immer irrtümlicher weise unter "Extras - Optionen" gesucht.

16.10.2008 - 10:06 Uhr

Hallo!

ich hab irgend eine Tastenkombination im VS 2005 gedrückt , und nun werden mir solche Leerzeichenpunkte (oder wie auch immer man die nennt) angezeigt.

Hat jemand eine Ahnung, wie man diese wieder abschalten kann?

Gruß Stu

10.10.2008 - 09:02 Uhr

Nochmal kompakt: Ist obige Themenstellung mit ZedGraph und überschaubarem Aufwand machbar. Oder gibt es bessere Bibliotheken?!

Ja ist es. Der ZGraph ansicht ist echt gut programmiert. Solltest du dort ein event oder so nicht finden, so kannst du es einfach einbauen.

In den ZedGraph kannst du alle Graphen einfügen, die von der Klasse CurveItem abgeleitet sind.

Wenn du nun bestimmte Sachen machen willst, kannst du dir ganz einfach nen eigenes CurveItem erstellen, und z.B. den Graphen selbst Zeichnen.

Alle vordefinierte CurveItems , wie z.B. das LineItem, nutzen als Datenquelle die "IPointList".

Wenn du dir nun eine eigene IPointList schreibst, kannst du die filterfunktionen dort bequem einbauen, und z.B. nur jeden 1000sten punke zurückgeben (wäre ein einfacher filter). So müsstest du die Datenauch nicht noch kopieren.

Ich arbeite mit dem ZedGraph schon länger, und ich hab bis jetzt alles schaffen können.

Nun zu dem Zoom event, die oben angefragt wurden (Ich poste das hier mal aus dem Code):


/// <summary>
		/// A delegate that allows notification of zoom and pan events.
		/// </summary>
		/// <param name="sender">The source <see cref="ZedGraphControl"/> object</param>
		/// <param name="oldState">A <see cref="ZoomState"/> object that corresponds to the state of the
		/// <see cref="GraphPane"/> before the zoom or pan event.</param>
		/// <param name="newState">A <see cref="ZoomState"/> object that corresponds to the state of the
		/// <see cref="GraphPane"/> after the zoom or pan event</param>
		/// <seealso cref="ZoomEvent" />
		public delegate void ZoomEventHandler( ZedGraphControl sender, ZoomState oldState,
			ZoomState newState );

		/// <summary>
		/// Subscribe to this event to be notified when the <see cref="GraphPane"/> is zoomed or panned by the user,
		/// either via a mouse drag operation or by the context menu commands.
		/// </summary>
		[	Bindable( true ), Category( "Events" ),
			Description( "Subscribe to this event to be notified when the graph is zoomed or panned" )]
		public event ZoomEventHandler ZoomEvent;

02.10.2008 - 15:08 Uhr

Ja aber wie gebe ich denn mein Bild aus der Recourcendatei zurück?

Wie oben beschrieben, in C# mit Namespace.Ressourcendatei.MeinBild.

Das muss doch in C++ auch gehen. Ich habe eben geschaut was der Disigner für einen Code für die Ressourcen-Properties generiert, Unzwar:

RessourceManager.GetObject.

D.h also meine Resourcen werden nicht geladen. Aber warum nicht?

02.10.2008 - 14:56 Uhr

Ok, die InnterException der TargetInvocationException ist:

{"Für die angegebene Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden. Stellen Sie sicher, dass UI.resources beim Kompilieren richtig in die Assembly MeinProject eingebettet wurde, oder dass die erforderlichen Satellitenassemblys geladen werden können und vollständig signiert sind."}

Heißt also meine Resource wurde nicht einkompiliert?

02.10.2008 - 14:46 Uhr

Hatte ich auch schon probiert, dann mache ich aber etwas falsch.

Meine Ressourcendatei heißt "UI.resx" und ist in einem Unterordner.

Nun sage ich:

ResourceManager ^ rm = gcnew ResourceManager("UI",Assembly::GetExecutingAssembly());

Dann will ich das Bild laden, also:

Image::FromStream(rm->GetStream("MeinBild"));

Daraufhin bekomme ich aber eine TargetInvokationException.

02.10.2008 - 14:29 Uhr

Hallo,

ich habe eine Ressourcendatei in der ein Image ist.

Nun will ich diese Laden. Das würde ich in C# wie folgt machen:

Image i = Namespace.Ressourcendatei.MeinBild;

Nun hab ich aber nen C++ Projekt und da geht diese Schreitweise natürlich nicht.

Wie würde man denn ohne "einfaches draufzugreife", also durch die gegebenen Ressourcenklassen, auf einkompilierte Ressoucendatei zurgreigen?

Gruß Stu

01.10.2008 - 13:37 Uhr

Ich hab den Fehler gefunden.

Ich musste Assembly.LoadFile, statt Assembly.Load aufrufen

01.10.2008 - 12:30 Uhr

Hallo,

wenn ich ein Win32 DLL Projekt erstelle, so kann ich in der DLL ja ganz normalen nativen code eingeben.

Nun gibt es in der Projekteinstellungen auch die Möglichkeit eine "CLR Unterstützung" mit anzubinden.

Nun habe ich meinem nativen Projekt mit CLR Unterstützung eine WindowsForm hinzugefügt.

Kompilieren geht wunderbar. Ich kann die DLL auch ganz normal native laden (mit LoadLibrary).

Aber wenn ich nun Zugriff auf den .NET teil haben will und Assambly.Load mache, dann bekomme ich eine Exception:

Die Datei oder Assembly C:\Users\JAN\Documents\Visual Studio 2005\Projects\TestMixCall\TestMixCall\bin\Debug\MixedDll.dll oder eine Abhängigkeit davon wurde nicht gefunden. Der angegebene Assemblyname oder die Codebasis ist ungültig. (Ausnahme von HRESULT: 0x80131047).

Kann ich ich solche gemischte dlls nun Grundsätzlich nicht als Assembly laden? Oder habe ich einfach einen Fehler gemacht?

Denn als "Verweis" kann ich die gemischte dll einbindn.

Gruß Stu

24.09.2008 - 01:38 Uhr

thread-priorität?

18.09.2008 - 12:24 Uhr

Ich habe mal eben gegoogelt und eine Race Condition wäre denn sowas?


bool bTrigger = false;
void DoIt()
{
    while(bTrigger )
        Application.DoEvents();
      bTrigger = true;
     //sicherer code
     bTrigger = false;
}

Und wie ist das eigentlich mit dem "lock (this)" in Timer-Tick-Funktionen?
Ist jeder Timer-Tick in einem eigenen Thread? Denn wenn dann der nächste Tick kommt, während der vorherige Tick noch ausgeführt wird, könnte sowas sich dann aufschaukeln zu einem Deadlock?

17.09.2008 - 23:12 Uhr

Ich glaube punkte editieren kannst du mit jeder "IPointList".

Soweit ich weiß ist das Codeschnipsel aus der Wiki auch für einer vorgänger version.

Bei dem neuen ZedGraph 5.xxx kannst du das editieren von punkte einfach per eigenschaft ein- und ausschalten.

Zum editieren der Punkte musst du aber auch eine Taste einstellen , bzw die vordefinierte Taste drücken.

17.09.2008 - 23:07 Uhr

Ja genau, Control.Invoke.

Ja ich hab es schon fast vermutet das es dadran nicht liegen kann, bzw die funktion immer aufgerufen wird.

Bin in letzer Zeit entwas Paranoid in sachen Threadsicherheit, bzw mit diesen Asynchronen Invokes.

Denn mein Programm läuft auf einen schnellen Rechner sehr gut, nur auf einem langsameren kommen Fehler!

17.09.2008 - 13:38 Uhr

Ja ist nicht so einfach, der der Fehler (wenn er kommt) erst noch 4 stunden oder so kommt. Muss ich so mal schauen.

17.09.2008 - 13:13 Uhr

Nein, kann ich auch leider nicht. Der Rechner ist beim Kunden. Und bei mir kommt der Fehler nicht.

17.09.2008 - 12:20 Uhr

Hallo,

ich stehe gerade vor einem, mir seltsam vorkommenden, Problem.

Ich habe ein event welches aufgerufen wird und 2 Funktion via Invoke aufruft:


void OnInjected()
{
            if (!bIsCollectiong)
            {
                Invoke(new DelegateCallVoidVoidFunktion(HideInjectedWaitingForm));
                Invoke(new DelegateCallBoolVoidFunktion(StartAquisition));
            }
}

Und so wie es aussieht, wird der erste Aufruf (HideInjectedWaitingForm) nicht ausgeführt.

Kann es sein, das ein "Invoke" aus irgentwelchesn Gründen nicht aufgerufen wird? z.B. wenn der Rechner echt lahm ist, und die CPU auslastung hoch geht?

Gruß Stu

23.08.2008 - 12:22 Uhr

ah so geht das also, vielen dank.

22.08.2008 - 15:50 Uhr

als Installer hätt ich hier auch noch InstallShield. Ich brauche eine installation mit viel extra sachen. InstallShieldX kotzt mich aber dermaßen an, das ich mein Setup selbst machen will.

Aber dazu muss ich wissen, wie ich das Programm in die Systemsteuerung unter "programme" ´bekomme.

22.08.2008 - 15:40 Uhr

Hallo,

hat jemand eine Ahnung, wie ich mein Programm in der Systemsteuerung unter "Programme und Funktionen" registrieren kann, so wie es Installer tun?

Gruß Stu

01.08.2008 - 21:32 Uhr

gibts beim DGV nicht auch ComboBox styles wie "DropDownList" ?

Denn wenn das ding dann auf Text gestellt wäre, würde man alles schreiben können.