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.09.2007 - 19:59 Uhr

nicht das ich wüsste, du könntst aber den Text 2 mal schreiben.

Einmal etwas größer...und dann darüber einmal etws kleiner...

02.09.2007 - 19:56 Uhr

was machen denn die Buttons auf der Seite`?
Die dienen doch nur dazu, um eine seite abzurufen. Auf diese Seite wirst du also auch über eine URL zugreifen können.

02.09.2007 - 19:51 Uhr

mehrmals Serialize aufrufen ist unsinnig.

Wenn du mehrere Objecte hast, dann serialisierst du die halt als Array oder als List.

01.09.2007 - 09:49 Uhr

wenn die Umbrüche ein problem darstellen, dann mach sie einfach weg.

String.Trim('\n');

geht aber sicherlich auch mir RegEx.

31.08.2007 - 15:00 Uhr

rechte Maustaste auf den ausdruck, und dann "Gehe zu Definition"

Ich glaube das VS kann alles das was Eclipse kann, und noch viel mehr!

31.08.2007 - 14:05 Uhr

das ist recht speziell, ich glauben nicht das einer im Forum so etwas wissen wird.

Da musst du mal in erfahrung bringen:

Wie komme ich an die Daten von "Thunderbird AddressBook" ? Gibts da nen Adressfile? wie ist das Format? Gibt es vieleicht Open-Sorce codes im diese Adressfiles einzulesen?

31.08.2007 - 13:52 Uhr

Also, du bekommst wohl ne WEbsite von Google zurück, wie auch immer du das angestellt hast...

Wie sieht denn ein Link im HTML COde aus? DAnn einfach das Dockument darauf durchsuchen.

Wie kann ich diese dem Anwender präsentieren

Das musst du doch selbst wissen... kannst ja machemn was du willst, nen Grid.... oder du machst dir eine eigene HTML seite....

Wie schließe ich die geöffneten Seiten

Hast du Google etwa im Browser geöffnet?

Ich glaube du hast noch einiges nicht verstanden. DU wirst so ohne weiteres keine Seiten im Browser durchsuchen können. Du musst google selbst ne anfrage schicken.

28.08.2007 - 11:04 Uhr

Hallo!

also ich möchte vor meinem Druck wissen, wie viele Seiten ich drucken werden, um so eine Seitennumerierung zu erstellen (z.B. Seite 1 von 5).
Nun ist das mit der Seitenzahl ja so eine Sache, da ich erst wärend des Druckes weiß, wie viele seiten es tatsächlich werden.

Im voraus zu berechnen, wieviele seiten es werden, wäre ziehmlich kompliziert, da dort sehr viele Faktoren eine rolle spielen.

Also, gib es in C# eine möglichkeit ein Vordruck zu erstellen, um heraus zu kriegen wievile seiten es werden?

gruß Stu!

28.08.2007 - 11:00 Uhr

ja wie willst du das denn machen? Willst das Objekt an einer Seit anfassen und dann "Zeitgleich" drehen? Das das wäre schon schwerer...

Aber was einfach ist, ist das Objekt einfach über das Mausdelta zu drehen, d.h du klickst irgentwo in dein Fenster rein, und ziehst die Maus, und veränderst dann deine Rotationswinkel...

Wie du die Mauskoordinaten abfragst weißt du sicherlich... und dann kannst du ja einfach die Defferenz errechnen , also neuer Punk - altem Punkt... und das nimmst du dann mit nem Faktor mal um die geschwindigkeit anzugleichen.

Mit dem neuen Winkel kannst du dann ja die Rotationmatrizen setzen....

AM besten blendest du die Maus wärend des ziehen noch aus...

23.08.2007 - 15:51 Uhr

die Tabbele ist doch nur zum anzeigen oder?

Dann druck doch einfach nen PDF...

22.08.2007 - 15:50 Uhr

ah sowas hab ich gesucht - danke!

22.08.2007 - 15:28 Uhr

Hallo,

ich kann doch Typinformationen speichern, mittels :

Type t = typof(MyClass); 

Kann ich mir von dem Type objekt nun ein Instanz erzeugen?
Also in meinem Beispiel ein eine Instanz der Klasse "MyClass"...

Wenn die Klasse doch einen Standartkonstruktor hat, müsste es doch gehen...

Gruß Stu

21.08.2007 - 12:24 Uhr

ich glaube in meinem fall würde eher das Iterface "IXmlSerializeable" zutreffen. Aber das ist mir zuviel aufwand für eine liste die gefiltern werden muss. Und es funktioniert ja auch mit dem Array...

21.08.2007 - 12:08 Uhr

aber was hab ich davon? ich will die Liste ja nur zum speichern filtern.. für alle anderen Operationen nehme ich die origanele Proeprtie

21.08.2007 - 11:59 Uhr

ich glaube, Linien an Objecten vorbei zu führen ist nichst das Problem.... ist zwar nicht einfach, aber sollte recht flott gehen.

Glaube schwierig wird es erst, wenn sich die Linien gegenseitig nicht überschneiden sollen.

21.08.2007 - 11:49 Uhr

ja das Problem ist, diese Liste wird in den abgeleiteten Klassen so oft genutzt.... wenn ich dann noch ne 2te Liste anlege müsste ich diese immer mit verwalten, und das wäre doppelt aufwand.

Und die jetige Propertie ist ja schon die Liste bzw nun Array, in der die Items drin sind, die gespeichert werden.

21.08.2007 - 11:42 Uhr

danke für die Aufklärung!

Ja die Liste wird tatsächlich vorher erzeugt... das muss aber auch so sein, da abgeleitet Klassen diese Nutzen.

Ich mache es dann einfach mit nem Array, also:

public BaseReport[] SaveableSubReports

Damit sollte er dann ja immer Set aufrufen, da er dort ja nichts mehr einfügen kann.

21.08.2007 - 11:19 Uhr

die linien musst du wohl zeichnen.

Im Paint....

mit DrawLine...

21.08.2007 - 11:03 Uhr

Startpunkt:

GraphPanel.DeineAxe.Scale.Min .... aber das hast du ja rausgefunden...

und es gibt auch ein eine ScrollRange, oder ScrollMax, damit kannst die die Scrollweite setzen, da bin ich mir sicher!

Lad dir mal die hilfe runter.. die ist echt gut, hab da was gefunden:

Indexer to access the specified ScrollRange object by its ordinal position in the list.
Syntax
C# Visual Basic Managed C++

public ScrollRange this [
int index
] { get; set; }
Public Property Item ( _
index As Integer _
) As ScrollRange
public:
property ScrollRange default[int index] {
ScrollRange get (int index);
void set (int index, ScrollRange value);
}

Parameters
index (Int32)
The ordinal position (zero-based) of the ScrollRange object to be accessed.
Field Value
A ScrollRange object instance

21.08.2007 - 10:59 Uhr

klingt nach dem Bug im , benutzt du VS? wenn ja musst du dein projeckt mal Cleanen, und VS - oder noch besser den PC neustarten, und dann "REbuild all" machen.

21.08.2007 - 10:57 Uhr

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

21.08.2007 - 10:13 Uhr

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?

16.08.2007 - 11:59 Uhr

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....

16.08.2007 - 11:46 Uhr

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...

16.08.2007 - 11:20 Uhr

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.

16.08.2007 - 11:12 Uhr

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.

16.08.2007 - 11:03 Uhr

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...

16.08.2007 - 10:47 Uhr

ja so ganz hab ich es noch nicht begriffen.

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.

16.08.2007 - 10:30 Uhr

bin ich auch schon draufgestoßen...

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

16.08.2007 - 10:12 Uhr

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...

16.08.2007 - 09:53 Uhr

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

14.08.2007 - 10:27 Uhr

Hi,

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

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:

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

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

13.08.2007 - 18:05 Uhr

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.

13.08.2007 - 17:04 Uhr

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

07.08.2007 - 17:14 Uhr

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.

07.08.2007 - 17:10 Uhr

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.

07.08.2007 - 17:06 Uhr

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.

07.08.2007 - 13:20 Uhr

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

07.08.2007 - 12:34 Uhr

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();
        }
07.08.2007 - 12:02 Uhr

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 👍

07.08.2007 - 11:47 Uhr

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.

07.08.2007 - 11:38 Uhr

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.

07.08.2007 - 11:32 Uhr

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

07.08.2007 - 11:17 Uhr

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

07.08.2007 - 11:06 Uhr

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.

05.08.2007 - 12:19 Uhr

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

01.08.2007 - 09:32 Uhr

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

Danke für deine Hilfe 😁

01.08.2007 - 09:09 Uhr

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

31.07.2007 - 13:52 Uhr

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

30.07.2007 - 17:22 Uhr

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