Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Stu42
Thema: [WPF] Bei PreviewKeyDown Key austauschen
Am im Forum: GUI: WPF und XAML

haste mal geschaut ob es mit dem KeyDown oder KeyUp event geht?

Thema: XML Serialisierung - Speichern ja, Laden - Nein
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Moin,

der XML serialisierer macht nur streß. 8o

Also:

Ich hab eine Basisklasse, die wieder selbst eine Liste von sich selbst hat... In diese Liste werden auch abgeleitet typen gespeichern.

Nun möchte ich diese Eigenschaft Serialisieren, also:

[XmlInclude(typeof(SelectableReport))]
    [XmlRoot("Report")] 
    public abstract class BaseReport
{
 //....
[XmlElement("SupReports")]
        public List<BaseReport> SaveableSubReports
        {
            get
            {
                List<BaseReport> tmpList = new List<BaseReport>();
                for (int i = 0; i < _SubReports.Count; i++)
                    if (_SubReports[i].IsSaveable)
                        tmpList.Add(_SubReports[i]);
                return tmpList;
            }
            set
            {
                _SubReports = value;
            }
        }
//....
}

Das speichern hiervon funktioniert wunderbar, in der XML-Datei stehen die "SubReports" auch schön Rekursive drin.

Aber diese Eigenschaft wird nich mehr geladen! Also wenn ich einen Breakpoint bei :"_SubReports = value;" wird diese auch nicht aufgrufen.

In den Konstruktor der Klasse, dessen typ vorher gespeichert wurde, kann ich beim laden aber hinein springen.... aber die propertie wird nicht aufgerufen...

Hat jemand eine AHnung woran das ligen könnte?

Gruß Stu

Edit: Mir ist noch was aufegallen:

wenn ich die Serialisierungseigentschaft auf:

public List<BaseReport> SubReports
        {
            get { return _SubReports; }
            set { _SubReports = value; }
        }

ändere, dann funktioniert es. Das ist doch aber recht komisch... denn ich brauche schon die anderen Eigenschaft.

Kann es sein, der XMLSerialisier es nicht verträgt, wenn man etwas anderes zurückgibt als man setzt?


Edit2:
Ja tut er!! Der Serialisierer ruft zum setzen der Liste nicht das Set Attribut auf, sonder das Get Attribut.... Das ist doch mist! warum tut er sowas? Kann man sowas verhinert, oder explizit sagen, das er gefälligt meine Werte über das Set Attribut setzen soll?

Thema: Scalierung Pixel / MM
Am im Forum: Grafik und Sound

den Faktor, kann ich mir doch auch aus der DPI erreichnen oder?

Ich hab das ja mittlerweile schon gemacht.

Der Faktor vom Blatt Papier auf dem Bildschirm ist ca 0.8. Wenn ich die 12 Punkt dann mit 0.8 mal nehme, dann sieht das für mich richtig aus....

Thema: Scalierung Pixel / MM
Am im Forum: Grafik und Sound

Auf dem Drucker wird die 12 Punkt schrift aber in MM gedruckt...

Dennoch klingt das was herbivore sagte logisch, das ich den font in Pixel erzeuge.

Aber es funktioniert nicht. Der Font auf 36 ist mit "GraficUnit.Pixel" genau so groß ohne "GraficUnit.Pixel ".

@MrSparkle

Es geht um die Skalierung Von MM auf Pixel...

Thema: Scalierung Pixel / MM
Am im Forum: Grafik und Sound

ja hab ich am anfang auch gedacht... aber es kommt nicht hin....

Eine schrift, die auf dem Drucker mit 12 punkt gedruckt wird, ist auf dem Bildschirm doch nicht 3*12 (36) punkt groß....

Sondern mit dem Faktor:
(VirtualPaperSize.Width (in Pixel) / DPI * 25.4f) / PaperSize.Width (in mm)

600 / 210 ist doch nur der Umrechnugsfaktor für die koordinen von Pixel in MM.
Und die einheit der Schriftgröße ist doch Punkt.

Thema: Scalierung Pixel / MM
Am im Forum: Grafik und Sound

wenn die Schrift auf dem Drucker mit 12 Punkt gedruckt wird, dann wird sie auf den Bildschirm doch nicht mit dem Transformationsfaktor (bei und 3) von Pixel in MM skaliert.

Sondern sie muss mit dem Faktor von Seitengröße zu Bildschirmausgabe in MM skaliert werden.

Thema: Scalierung Pixel / MM
Am im Forum: Grafik und Sound

also, GraphicsUnit.Milimeter nehme ich fürs Drucken. Aber wenn ich das für Zeichnen auf dem Bildschirm nehme, dann wird ja alles Scaliert, also die LinienDicke etc...

Wenn ich dann z.B. eine Linie im DashStyle zeichne will, dann wird mit GraphicsUnit.Milimeter die Line dicker, und die Striche länger. Wenn ich die Width dann zurück auf 0.1f mm setze, wird die Linie zwar wieder 1 Pixel groß, aber die "Dashes" bleiben länger.... und das sieht das hässlich aus.



Bis jetzt habe ich es so gemacht, das ich halt ganz normal über den Dreisatz meine Grafiken auf den Bildschirm skaliert habe.

Also mit dem Faktor: 600 / 210.

Funktioniert auch wunderbar!

Nun möchte ich aber eine Schrift skalieren!
Also mache ich : FontSize *= 600 / 210

Aber das ist quatsch..... denn 600 / 210 ist gerundet 3 .... und die Schrift ist auf dem Bildschirm NICHT 3 mal größer als auf dem Blatt...

Thema: Scalierung Pixel / MM
Am im Forum: Grafik und Sound

ja so ganz hab ich es noch nicht begriffen.

Zitat
daraus ergibt sich automatisch und fest, wie groß ein Pixel ist.

Stimmt nur teilweise...

Die Korrdinaten kannst du über nen Dreisatz tranformieren. Aber wie sieht es mit der Größe aus?


Die Korrdinaten sind zwar alle um einen Factor von (600 / 210) verändert.

Das heißt doch aber nicht das ein Quadrat nun 3,xx mal größer ist oder?


Mann muss sich da ausrechnen, wie groß ist die Scalierung vom Blatt auf den Bildschirm ist ... und da spielt dann wieder die größe vom Pixel eine rolle.

Thema: Scalierung Pixel / MM
Am im Forum: Grafik und Sound

bin ich auch schon draufgestoßen...


ändert aber nichts am Problem, das die Pixelgröße variiert.

Thema: Scalierung Pixel / MM
Am im Forum: Grafik und Sound

ja wie groß ist denn ein Pixel In MM?

Das Variiert doch immer...

Edit: Und die Unit auf MM ist so eine Sache, da dann alles verzeht ... z.B. ein Pen im Dash Style...

Thema: Scalierung Pixel / MM
Am im Forum: Grafik und Sound

Hallo,

ich habe ein virtuelles Din A4 blatt, welches ich in meinem Programm Disignen will.
Alles was ich also im Disigner Editiere ist X mal so groß wie auf dem Blatt Papier.

Also wenn mein Blatt 210 mm Breit ist, und ich das Blatt z.b. auf 600 pixel scalieren will, wie groß ist dann mein Scalierungsfaktor?

Also was muss ich da genau rechnen?

Gruß Stu

Thema: XML Serialisierung mit Vererbung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

also der Tip mit dem XmlInclude war gut, damit geht es wunderbar.

Zitat
Das Performance-Problem läßt sich umgehen, wenn man deklarativ mittels XmlInclude arbeitet.

Was meinst du damit? also so wie du es geasgt hast?

z.B:

[XmlInclude(typeof(SelectableReport))]
    [XmlRoot("Report")] 
    public abstract class Base
{
 ...
}


Noch eine anderen Frage:
Lassen sich Properties auch Variable Serialisieren? Also mal speichern, und mal nicht speichern.... also über eine bedingung?


Edit:
Zitat

XmlSerializer ser = new XmlSerializer(typeof(SomeData), new Type[]{ typeof(DerivateA), typeof(DerivateB) }); 

Ein Typarray muss man aber nicht angeben, es reicht der Basistyp.

Thema: XML Serialisierung mit Vererbung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

ja genau Properties.... also diese set und get dinger....

Also bei der Methode "Serialize" bekomme ich auch eine "InvalidOperationException".

Wenn etwas mit dem zu serialisieren typ nicht stimmt, bekomme ich die Exception schon bei der Erzeugung der Klasse, und nicht erst bei dem aufruf der Methode Serialize.

In den Abgeleiteten Klassen gibt es natürlich auch Propertiers die ich nicht speicher kann (z.b. Pen´s oder Brush´es) , diese ignoriere ich aber alle Mittels [XmlIgnore()].

Das ist auch schon so , das ich in der "Basisliste" Elemente einfüge, der 5 mal oder mehr vererbt wurden.

Thema: XML Serialisierung mit Vererbung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

also das mit dem XML Serialisierer und den Attributen ist so eine Sache. Denn wenn sich ein Attribut nicht Serialisieren lässt, gibt es bei dir Initailiserung des Serializers eine InvalidOperationException.

also hier:


XmlSerializer serializer = new XmlSerializer(typeof(Page));

Ich habe folgendes Problem. Ich habe eine List von einer Basisklasse. Wenn ich in diese Liste nun Vererbte elemente einfüge, dann kann ich diese Liste nicht mehr Serialisieren, und ich bekomme eine Exception bei:

serializer.Serialize(fs, this);


Meine abgeleitetn Klassen habe ich auch alle mit diesen XML-Serialisierung tags versehen.

Nun meine Frage:
Muss man etwas bei der XML-Serialisierung beachten, wenn man eine "Basisliste" hat, wo aber Vererbte Items drin sind?


Gruß Stu

Thema: StatusStrip: Items 1 bis n nicht zu sehen, wenn 0 dynamisch Size gesetzt bekommt
Am im Forum: GUI: Windows-Forms

ist das nicht so , das man in der StatusBar die items nur über die eigentschaft "Spring" ändert?

Wenn ein Item SPring ist nutzt es den gesamten freien Platz.

Thema: Wie zeichne ich 2d mit direct3d
Am im Forum: Grafik und Sound

schau dir mal "Sprites" an.

Und was willst du denn machen, was schnell gehen soll? Die GDI+ ist zwar langsamer, dennoch kann man mit ihr viel machen.

Thema: LiniarGradientBruh Transformieren
Am im Forum: Grafik und Sound

ja sollte

aber ich habs nun schon so anderst gelöst...

außerdem weiß ich nicht, wohin das Koordinaten systen transformiert wird.... und eher ich mich da einarbeite, löse ich es lieber schnell und einfach.

Thema: LiniarGradientBruh Transformieren
Am im Forum: Grafik und Sound

das ist ja der Horror. So wie ich das hier sehe, sind die Auswirkungen der Drehung nicht mal irgentwie nen Offset, sondern irgent ein anderen Zusammenhang.

Das ist mir alles zu blöde, ich speicher mir einfach stumpf den Winkel ab, und erzeug mir nen neuen Verlauf

Thema: LiniarGradientBruh Transformieren
Am im Forum: Grafik und Sound

mhh, da gibts noch nen weitere Problem. Nach meinen Transformation ist der verlauf irgentwie falsch verschoben.

Siehe rechtes Bild.

Woher kann das kommen? Ich Verschiebe und scaliere doch eine gedrehte matrix...

public static Matrix ScaleLinarGradientBrush(LinearGradientBrush b, RectangleF Border)
        {
            Matrix Base;
            try
            {
                Base = (Matrix) b.Transform.Clone(); 
                b.TranslateTransform(Border.Left, Border.Top);
                b.ScaleTransform(Border.Width / b.Rectangle.Width,
                                                                Border.Height / b.Rectangle.Height);
               return Base;
            }
            catch (Exception) {
            }
            return new Matrix();
        }

Thema: LiniarGradientBruh Transformieren
Am im Forum: Grafik und Sound

ja du hast ja recht =)

Aber da ich diese Skalierungfunktion schon X-mal im code benutze, wäre es halt einfacher, alles nur in der Funktion machen, sprich mit einer Gegegoperation.

Aber ich werd dann in den sauren Apfel beißen, und die Transformation nach dem ändern in die Urpsrungsmatrix zurück setzen.

Danek für deine Hilfe

Thema: LiniarGradientBruh Transformieren
Am im Forum: Grafik und Sound

ja die Rotation kommt ja mit dem Erstellen des Verlaufes. Die Drehung ist da ein Paremter, welcher dann schon vorher die Matrix transformiert.

Ich könnte natürlich, wie du es gesagt hast, die Matrix speichern. Dann müsste ich aber: Transformeiren, Zeichen, Zurücksetzen.

Meine Urpsrungsfrage war ja, ob es nicht einen weg gibt, irgentwie nur meine Transformation zurück zu setzen.

Aber ich sehe schon, ich werd es wohl doch , wie du gesagt hast, mit dem clonen machen müssen.

Thema: LiniarGradientBruh Transformieren
Am im Forum: Grafik und Sound

ja ich will es aber Gedreht transformiert haben. Es bringt mir ja nichts, wenn die größe von dem Verlauft stimmt, aber die Drehung weg ist.

Thema: LiniarGradientBruh Transformieren
Am im Forum: Grafik und Sound

dann ist meine Rotation aber wieder weg, ich will sie ja verschieben, und die Rotation beibehalten.

Thema: LiniarGradientBruh Transformieren
Am im Forum: Grafik und Sound

Hallo,

in meinem Programm kann man einen Farbverlauf auswählen. Doch damit der Farbverlauf so aussieht, wie man in gewählt hat, muss er Skaliert werden, da er sonst an einer Stelle einfach von vorne Anfangen würde.

Zum skalieren mache ich folgendes:

public static void ScaleLinarGradientBrush(LinearGradientBrush b, RectangleF Border)
        {
            //scale the LinearGradientBrush

            try
            {
                b.ResetTransform();
                b.TranslateTransform(Border.Left, Border.Top);
                b.ScaleTransform(Border.Width / b.Rectangle.Width,
                                                                Border.Height / b.Rectangle.Height);
            }
            catch (Exception) { }
        }

Funktionert auch, bis auf ein Detail. Wenn ich einen gedrehten Verlauf erstelle (über den Konstruktorparameter) dann wird der Verlauf intern über die Transformatiosmatrix gedreht.

Damit mein Verlauf aber nicht immer größer wird, mache ich vor jeder meine Scalierung:

b.ResetTransform();

Damit wird aber leider auf die Rotation resettet.

Erben, um den Winkel zu speichern geht auch nicht, da der Brush sealed ist.

Gibt es eine Möglichkeit, die Matrix vor meinen Transformationen zu speichern, und nach meinen Transformationen wieder so einzurechnen, das die Ursprungs Rotation noch vorhanden ist?

Also die Ursprungmatrix speicher, und gegen ende wieder einrechnen mit "multiply" geht nicht, das habe ich schon probiert.


Gruß Stu

Thema: [CF] Transparentes Bild in PictureBox
Am im Forum: Grafik und Sound

vileiecht unterstützt das Compackt Framework keine Alpha Kanäle in einer PB.

Also wenn die "Alpha Stellen" immer 255 sind, also du keine Abweicheung berechnen willst, dann kannst du das Bild in ein Bitmap Laden, und via TransparentKey (oder TransparentColor) die Stellen transperent machen.


Vieleicht lässt sich das Bild ja mit "DrawImage" richtig zeichnen.

Thema: PictureBox: Wert eines Pixel abfragen
Am im Forum: Grafik und Sound

hättest auch Click nehmen können, und die Koordinaten dann wandeln mit "PointToClient"

Thema: Clipper
Am im Forum: Grafik und Sound

tatsache. Da war ich mal wieder verplant. Ist mir direckt peinlich 8o .

Danke für deine Hilfe

Thema: Clipper
Am im Forum: Grafik und Sound

Moin,

hat die GDI+ so etwas wie nen Clipper? Also ein definiertes Rechteck wo alle zeichnungen die drüber hinaus gehen abgeschnitten werden.

In der Graphics-Klasse hab ich eine Clip eigenschaft schon gesehen, nur ist die leider schreibgeschützt.


Gruß Stu

Thema: Draw & Print - Skalierung
Am im Forum: Grafik und Sound

ScaleTransform() ist schon ne große hilfe. danke

Thema: Überlappung von 2 Polygonen
Am im Forum: Rund um die Programmierung

ja tauch die beiden polygone einfach. Dann ist das anderen wieder länger.