Laden...
V
ViperNeo myCSharp.de - Member
Professional IT Consultant & Software Architect Darmstadt Dabei seit 22.02.2008 352 Beiträge
Benutzerbeschreibung

Forenbeiträge von ViperNeo Ingesamt 352 Beiträge

07.07.2010 - 09:47 Uhr

das ist sehr schön geschrieben und ich glaube da hast du wohl recht. das mit dem dispose hat sich erledigt gehabt, daihc in einem anderen thread unter meinem einige argumente rauslesen konnte. vllt ist das dann eher was für off-topic.

grüße

07.07.2010 - 09:30 Uhr

Hallo Leute,

ich arbeite seit dieser Woche in einem Unternehmen, die .NET Software entwickeln.

Mein erster Weg soll in Richtung Code-Optimierung der bestehenden Anwendungen führen. Nun habe ich festgestellt, dass in keiner Anwendung Dispose eingesetzt wird... Das ist nicht der einzige Makel, denn es werden auch Dignewie DoEvents genutzt, DialogResults ignoriert und stattdessen mit Propertys gearbeitet und und und... Also es gibt eine Menge was man da optimieren könnte.

Nun hatte ich heute morgen ein GEspräch mit dem Chefprogrammierer und der stellt sich sturr^^

Ich habe ihm versucht zu erklären, dass Dispose ein wesentliches Mittel ist um die Resourcen wieder freizugeben und über den GC weg zu räumen. Er meinte doch tatsächlich, dass man das nicht braucht und es eher von Nachteil wäre Dispose aufzurufen... Nun bin ich etwas ratlos, da ich das GEfühl habe, dass er sich etwas auf die Füße getreten fühlt von einem Jungspund wie mir (er ist seit 10 Jahren in diesem Unternehmen und entwickelt hier in .NET). Jedoch bin ich der Meinung, dass viele seiner Ansätze einfach besser gehen... Er stellt sihc in die typische Programmiererabwehrhaltung: er weiß das alles, hat aber keine zeit dafür, aber dispose ist wirklich unnötig.

Wie würdet ihr an so eine Sache rangehen? Ich arbeite das erste mal wirklich fest in einem Entwicklungshaus und habe da wenig ERfahrung. Ich weiß das Entwickler schnell verletzt sind wenn man ihr können auch nur ein bisschen anzweifelt oder kritisiert. so sind zum GLück nicht alle, aber ja leider viele und dieser Kollege wohl auch.

Danke schonmal!

Grüße ViperNeo

06.07.2010 - 15:48 Uhr

Hallo Leute,

wie geht denn das (Inhalt im angehängten Bild...). Wie bekomme ich denn eigene Partial Klassen mit unter die Form eingereiht?

Danke!

06.07.2010 - 15:29 Uhr

Hallo Leute,

ich denke ihc bin einfach nur zu blöd, aber könnt ihr mir sagen wie ich so einen Rahmen hinbekomme?

Wenn ich FormBorderStyle auf Sizeable stelle und Text auf "" dann wird die Titelleiste ausgeblendet. Ich möchte aber nicht das man die Griffe sieht um die FOrm zu verkleinern und zu vergrößern, da sie fixed sein soll...

hat jemand eine idee?

Danke!!

Grüße
ViperNEo

06.07.2010 - 13:27 Uhr

Hallo Leute,

ich verzweifle gerade... Und zwar bin ich dabei ein Projekt auf 3.5 hochzuziehen und nun habe ich eine DLL die einfach nicht mher will... Nach dem hochziehen auf 3.5 und neu kompilieren, meckert das Studio in einigen Projekten:

Fehler 2 Der Typ "ClassHelper2.ClassUserControl_Programm_Funktion" ist in einer nicht referenzierten Assembly definiert. Fügen Sie einen Verweis auf die Assembly "ClassHelper2, Version=3.2.628.1147, Culture=neutral, PublicKeyToken=d57c27876ae9038b" hinzu. V:\Pallas\UserControls\MVE\MVEInputPanel.cs 13 15 MVE

Komischerweise funktioniert es in manchen und in manchen nicht. Ich habe die Version etc. kontrolliert, also es passt alles und ihc habe die ASsembly jetzt wie oft gelöscht und nochmal neu kompiliert und nochmal neu eingebubnden. Aber es will einfach nichtl...

Kennt jemand das Phänomen und wie kann man das denn lösen?

Danke!

Beste GRüße
ViperNeo

05.07.2010 - 15:28 Uhr

okay danke 😃

Die Hallo Welt war übrigens eine WinForms Anwendung. und wir versuchen einfach zukunftsgerichtet die Applikation hochzupushen, da auf Win7 immer das 1.1er Framework nachinstalliert werden muss. Außerdem wollen wir Abstand gewinnen vom Studio 2003, da das Studio 2008 einfach komfortabler ist und dort gibt es kein 1.1er Framework mehr.

05.07.2010 - 15:26 Uhr

Okay das hört sich gut an. Dann werden wir die Portierung auf 3.5 durchziehen. Probiert haben wir das ganze schon mit einem kleineren ausgelagerten Projekt und da gab es massenhaft Compilerfehler. Das Problem ist auch noch, dass viele Teilbereiche in VB geschrieben sind und nicht alles in C#.

GRüße

05.07.2010 - 15:16 Uhr

ich habe gerade gesehen das die projekte doch erst auf 1.1 sind und noch gar nicht portiert wurden. danke für den link ic hschaus mir mal an.

also im prinzip müssten wir einfach alles auf 3.5 ziehen und die compiler fehler die auftreten beheben. danach sollte alles laufen, auch unter win2k und dem 2.0er framework?

danke!

05.07.2010 - 15:06 Uhr

Hallo Leute,

das Unternehmen indem ich arbeite, hat eine sehr große .NET Anwendung realisiert, auf Basis von .NET 1.1.

Dieses wurde bereits auf 2.0 portiert. Um auf einem aktuellen stand zu bleiben soll das Projekt nun auf 3.5 portiert werden.

Problem hierbei, ein Kunde nutzt noch Win2000 und dort wird das 3.5er Framework nicht unterstützt... Ich hoffe nun mir kann jemand kurz und knapp etwas zu den einzelnen Frameworks erzählen. Ich verstehe die Unterschiede der einzelnen nicht ganz.

WEnn ich das richtig sehe, müsste eigentlich die POrtierung auf 3.5 recht einfach sein, mit wenigen Änderungen, da das 3.5er das 2.0er Framework beinhaltet. Frage ist nun ob das dann auf Win2k noch läuft. Eine kleine Hallo Welt Anwendung unter 3.5 geschrieben läuft problemlos auf dem 2.0er Framework.

Wie würdet ihr da rangehen und kann mir jemand mal das mit den Frameworks genauer erläutern? Das wäre wirklich super, werde über google nicht ganz schlau daraus.

Danke!

Beste GRüße
ViperNeo

22.06.2010 - 17:08 Uhr

Die ist super und funktioniert klasse!

Danke!

22.06.2010 - 15:44 Uhr

Hallo Leute,

ich brauche mal einen Tip... Ich schreibe mir gerade ein kleines Screenshot Tool das meine bisherigen Tools ablösen soll. In diesem Tool benötige ich natürlich acuh so etwas wie einen globalen Hotkey um den Screen auszulösen.

Ich habe mich bereits etwas mit Hooks und Polls beschäftigt, jedoch finde ich das irgendwie unschön und die fertigen Klassen die ich gefunden habe, fangen immer alles ab, die Unterscheidung und das Gruppieren bestimmter Tasten fiel mir an dieser Stelle unglaublich schwer.

Dann habe ich noch etwas von RegisterGlobalHotkeys gelesen, mit denen man wohl Hotkeys seiner Anwendung registrieren kann, jedoch brauche ich hierfür eine Form (Handle der Form), die ich jedoch nicht besitze.

Hat jemand einen schlauen Tip mit welcher Lösung man das sauber und performant umgesetzt bekommt?

Danke schonmal!

Grüße
ViperNeo

14.06.2010 - 17:15 Uhr

Wie Jack sagt nutze ich WaitForExit() an der Stelle. Dadurch wartet meine Anwendung auf Beedingung des anderen Prozesses und ist somit eingefroren... Das ist grundsätzlich acuh nicht mein Problem. Sie kann und soll ruhig eingefroren und nicht nutzbar sein. Probleme gibt es nun eben wenn der Prozess des Spiels nicht korrekt beendet wurde.

vielleicht wäre es jedoch eine lösung, meine temrinal applikation in einen art ruhemodus zu schalten und in einem neuen thread den prozess zu überwachen. sobald der prozess geschlossen ist die applikation zurückholen. dann blockiert nichts. jedoch kann es dann natürlich vorkommen das bei nicht korrekter beendigung des anderen prozesses meine anwendung nicht mehr aus dem ruhemodus kommt.

14.06.2010 - 11:58 Uhr

das ist nicht so einfach. andere codierung und schriftzeichensatz. aber warum besorgst du dir diese dinge nicht einfach und stellst es dann mit der entsprechenden schriftart dar?

14.06.2010 - 11:39 Uhr

hm also meinst du die auslagerung in einen neuen thread wäre hier eine sinnvolle möglichkeit?

dann verliere ich doch aber wieder die kontrolle über den neuen prozess... oder steh ich grad auf dem schlauch?

14.06.2010 - 10:35 Uhr

Hallo Leute,

ich bin zurzeit am verzweifeln mit einem Kundenprojekt...

Für den Kunden habe ich vor längerer Zeit eine Multimediaterminal Anwendung entwickelt. Diese ist Netzwerkfähig und läuft soweit auch sehr stabil.

Nun kam zu Anfang des Jahres eine Erweiterung mit ins Programm. Und zwar wurde von einem Flash-Entwickler ein (900MB) großes Flash Spiel entworfen, indem Animationen, Videos und Sprachelemente eine große Rolle spielen.

Da die Terminalanwendung sogut wie alles abspielen kann, war mein erster Ansatz das ganze über eine HTML Seite und dem WebBrowser-Control darzustellen.
Dies erwies sich jedoch als großer Fehler, da das Flash einfach zu groß für den IE war und die Anwendung tierisch geruckelt hat.

Also bat ich den Entwickler mir eine FlashApplikation (.exe) zu schicken, da das aus Flash heraus funktioniert und mithilfe des FlashPlayers kompiliert wird und somit eine ausführbare Anwendung.

Diese Flash.exe läuft nun auch einwandfrei. Problem hier ist nun jedoch, dass ich mitbekommen muss, ob das Flash-Spiel läuft oder nicht. Daher habe ich mich dazu entschlossen in der Terminalanwendung einen Prozess zu starten und auf Beendigung dessen zu warten. Bei meinen Testläufen lief das auch ohne Probleme.

Nun bekomme ich vom Kunden jedoch regelmäßig Nachrichten, dass die komplette Applikation inklusive Rechner abstürzt. Nach Kontrolle der Systemeinstellungen im Windows habe ich feststellen können, dass meine Terminalanwendung oft mit einem "Keine Rückmeldung"-Error abstürzt und danch irgendwie einen StopError im Windows auslöst und somit entweder das System abstürzt oder die Benutzer aufdie Desktop-Oberfläche gelangen.

Für mich ist es langsam ein großes Rätsel, da ich bereits Speicher und PageFile in den Terminals angepasst habe, um mehr Speicherpower rauszuholen, da ich anfangs dachte das Flash Teil verstopft alles. Das hat jedoch rein gar nichts gebracht.

Habt ihr eine Idee was man noch optimieren könnte?

Danke schonmal!

Beste Grüße,
ViperNeo

13.06.2010 - 15:01 Uhr

Hallo Leute,

ich verzweifle gerade an einem Phänomen das ich mir nicht erklären kann.

Und zwar habe ich eine Form. In dieser mache ich folgendes:


protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            
            if (_backBuffer == null)
            {
                _backBuffer = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
            }

            using (Graphics g = Graphics.FromImage(_backBuffer))
            {
                g.DrawImageUnscaled(StauferResources.bg_terminal, ClientRectangle);
            }

            e.Graphics.DrawImageUnscaled(_backBuffer, new Point());
        }

        protected override void OnPaintBackground(PaintEventArgs e) { }
        protected override void OnBackgroundImageChanged(EventArgs e) { }

        protected override void OnSizeChanged(EventArgs e)
        {
            if (_backBuffer != null)
            {
                _backBuffer.Dispose();
                _backBuffer = null;
            }

            base.OnSizeChanged(e);
        }

Nun habe ich ein CustomPanel Contol auf der Form platziert, was die Form vollständig verdeckt. Dieses CustomPanel Control schnappt sich den BackBuffer und übernimmt den Ausschnitt des Bildes der MainForm.

Nun verhält sich die Form jedoch so, dass wenn ein oder mehrere Controls die ganze Form verdecken, die onpaint methode gar nicht erst aufgerufen wird von der Form.

Meine Frage ist nun, wie schaffe ich es, dass die Form sich trotzdem neu zeichnet und die OnPaint Methode nutzt?

Danke schonmal!

Grüße
ViperNeo

13.06.2010 - 01:30 Uhr

hallo,

das thema kenne ich doch. wenn du der kerl bist dem ich ein beispielprogramm per icq geschickt habe, dann nimm doch einfach mal dieses als basis. da ist die grundlegende zeichenlogik für dein problem bereits drin. das mit dem blinkenden verschiebbaren rahmen ist recht einfach. du aktualisierst ja die zeichenfläche und merkst dir einfach die zeichenposition die du beim klick mit der maus auf die zeichenfläche erhalten kannst. danach zeichnest du die zeichenfläche neu und lässt den rahmen eben an dieser position neu anzeigen.

grundlegend wirklich nicht so schwer und wie bereits erwähnt habe ich die basis bereits übersendet. falls du nicht dieser jemand sein solltest, dann entschuldige bitte, bin grad nur etwas verärgert.

beste grüße
viperneo

11.06.2010 - 09:06 Uhr

aforge bietet dazu von haus aus soweit ich weiß nichts an. was du aber machen kannst, ist das bitmap output file, dass du ja sicher zum anzeigen der cam benutzt, einfach 90 Grad drehen.


public static Image RotateImage(Image img, float rotationAngle)
{
    Bitmap bmp = new Bitmap(img.Width, img.Height);
    Graphics gfx = Graphics.FromImage(bmp);
    gfx.TranslateTransform((float)bmp.Width / 2, (float)bmp.Height / 2);
    gfx.RotateTransform(rotationAngle);
    gfx.TranslateTransform(-(float)bmp.Width / 2, -(float)bmp.Height / 2);
    gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
    gfx.DrawImage(img, new Point(0, 0));
    gfx.Dispose();

    return bmp;
}

So geht das grundsätzlich. Das würde ihc aber nicht für jedes einzelne Bild machen. Soweit ich weiß merkt sich das Graphics Objekt die Transformation. Von daher könntest du dir ein Bitmap zum draufmalen plus das Graphics Objekt erzeugen, das Graphics Objekt transformieren und danach einfach immer mithilfe dessen das Bild in das Bitmap reinmalen. Dann sollte deine Drehung performant und sauber laufen...

Grüße
ViperNeo

07.06.2010 - 11:02 Uhr

Warum zeichnest du die Tabellen nicht einfach selbst anstatt unmengen an Controls dafür zu benutzen?

Die Daten wirst du ja irgendwo in einer Klasse halten. Dazu schreibst du dir eine DrawTable-Rendermethode und zeichnest dir die Tabellen selbst wie du sie brauchst.

DoubleBuffered hast du aktiviert?

Ansonsten ist es normal das unmengen an Controls die Form zum flackern bringen...

Mehr dazu hier:
[FAQ] Flackernde Controls vermeiden / Schnelles, flackerfreies Zeichnen

Grüße
ViperNeo

07.06.2010 - 10:59 Uhr

Die Frage ist, wann du das Bitmap erstellst. Wenn es immer beim Resizen gezeichnet werden soll, könntest du die OnResize Methode der Form überschreiben und dann mit den aktuellen Werten einfach das Bitmap zeichnen.

Das sollte meiner Meinung nach funktionieren und auch dein Problem bezüglich der falschen Werte lösen.

Eventuell solltest du noch im Constructor

this.SetStyle(ControlStyles.ResizeRedraw, true);

setzen.

Und vergesse nicht zu Disposen 😉 sonst wirds irgendwann laaaaaangsam.

Grüße
ViperNeo

27.05.2010 - 14:58 Uhr

also nur um bilder geht es mir hierbau gar nicht. es geht grundlegend um gewisse funktionalitäten wie zum beispiel ein ordentliches dragdrop handling, nummerierungen und zeitangaben und was recht wichtig wird ist das design. das beudetet ich möchte bestimmte hover effekte erzielen und nicht die standard farben nutzen.

aber wo ich jetzt drüber nachdenke macht es doch eher sinn eine listview zu nutzen und deren gestaltung einfach etwas zu überarbeiten. das rendering der items ist dort ja schon implementiert, dann müsste ihc mich darum nicht selber kümmern. naja hatte einen guten lerneffekt meine erste idee... ich werde mal auf die listview umschwenken und versuchen deren design umzubauen. ich denke dann werde ich weitaus weniger probleme bekommen^^

danke soweit und ich denke der thread kann geclosed werden.

27.05.2010 - 14:42 Uhr

Diese Eigenschaft gibt es wohl nicht bei der automatischen ScrollBar bei einer Einstellung von AutoScroll.

Habe jetzt aber mal ein VerticalScrollbar Control eingebaut Bei diesem kann ich die property value auch nutzen.

Gemacht habe ich jetzt die Logik mit einem DelayedFunctionCall der eine Funktion mehrmals aufruft, so kann ich dann die Scroll-Methode der Scrollbar aufrufen und verschieben. Leider klappt das allerdings noch nicht ganz flüssig und beim verschieben wird dann auhc mein gedraggtes item von der maus weggeschoben... weiss noch nicht genau woran das liegt aber mal schauen...

prinzipiell halte ich das mit der scrollbar für etwas hässlich, vllt muss ich mir doch eine eigene bauen die meine anforderungen erfüllt.

gibt es eigentlich controls mit der man eine playlist ala windows mediaplayer oder so bauen kann? hatte eben noch überlegt, dass ich ja eventuell auch eine listviewext hätte schreiben können und einfach die paint methoden überschreibe für ein anderes layout, sowie abstände einbaue etc. um cover anzuzeigen.

wie würdet ihr vorgehen? eigenes control oder von der listview ableiten?

😃 grüsse

27.05.2010 - 12:49 Uhr

Hallo Leute,

ich habe für einen Musikplayer ein PlaylistControl entwickelt. Dieses ist vom Ansatz her der Winamp Playlist ähnlich, was das Verhalten, Bedienung etc. angeht.

Die Listeneinträge zeichne ich selbst, das heisst ich habe ein BasisControl, auf diesem Zeichne ich dann die ganzen Listeneinträge.

So, wenn nun mehr Listeneinträge da sind als anzuzeigen geht, dann setze ich AutoScrollMinSize.Height auf die tatsächliche Grösse der vorhandenen Einträge und die Scrollbar wird angezeigt. Das Scroll Event habe ich auch schon abgefangen und das korrekte neuzeichnen beim Scrollen funktioniert ebenfalls.

Nun möchte ich aber noch meine DragDrop Events darafhin anpassen. Das bedeutet: Markiere ich einen Eintrag und ziehe diesen zum Beispiel nach oben, sollte die Scrollbar bei Bedarf langsam mitscrollen, damit ich das Objekt hinschieben kann wo ich will in der Liste.

Mein Problem ist nun herauszufinden wie ich manuell der Scrollbar sage das sie scrollen soll. Ich finde leider nichts wie einen Offset der die aktuelle Position der Scrollbar angibt. Auch weiss ich nicht genau wie ich herausfinde wann schluss ist mit scrollen, weil ich ganz oben oder unten angelangt bin. Hat hier jemand einen brennenden Tip für mich?

wäre super+ vielen dank!

greetz
viperneo

24.05.2010 - 15:34 Uhr

so, also nochmal 😃

skinning ist kein bestandteil dieses threads, kann außer acht gelassen werden, wollte nur kurz mein vorhaben beschreiben.

die audio wiedergabe habe ich nun auf zwei wegen umgesetzt: einmal auf low level ebene über die api und waveout, zum anderen über directx und directsound.

weiß jemand welche methode besser geeignet ist, um später equalizer funktionen einzubauen? sprich welche methode lässt sich eher beeinflussen in diese richtung?

kennt sonst wirklich keiner eine einfache kostenfreie lib die nutzbar ist? Bass.NET ist super, leider blenden die Jungs in der Free-Edition ständig Werbung ein beim Programmstart. irrKlang finde ich persönlich kacke und NAudio unterstützt anscheinend nicht die Beeinflussungsfunktionen für einen Equalizer.

wäre echt cool wenn jemand was wüsste oder sowas vllt rumfliegen hat^^

Mit den mathematischen Grundprinzipien plage ich mich grad rum. Mathe LK reicht hier aber nicht ganz aus um das vollends zu kapieren,.. Aber mal schauen wie weit ich damit komme später.

Grüße ViperNeo

24.05.2010 - 11:09 Uhr

Also ich nutze Windows 7 Professional x64 sowie das Visual Studio 2010 Premium.
Windows 7 ist soweit auf dem neusten Stand der Updates von Microsoft. Die Lizenzen sind offizielle Release Lizenzen meines Betriebes.

Die Exceptions die ich bemerke treten im Studio auf während ich Code-Screibe oder im DesignMode arbeite. Welche genau das sind werde ich beobachten und mal dokumentieren.

24.05.2010 - 10:18 Uhr

Hallo Leute,

irgendwie stresst mich Visual Studio 2010 zurzeit sehr. Hin und wieder kommt es aus heiterem Himme zu Exceptions, die dazu führen, dass ich die Pfeiltasten der Tastatur nicht mehr benutzen kann, oder es kommt zum totalen Ausfall des Debuggers, sodass ich meine Anwendung nicht mal mehr aus dem VS heraus starten kann...

Auch sonst muss ich sagen läuft das ganze extrem langsam und das Studio hängt manchmal etwas träge nach... Bevor ich nun wieder zum alten Studio 2008 greife, wollte ich mal wissen ob jemand diese Probleme kennt und eventuell schon abhilfen dafür gefunden hat.

Meine Hardware ist übrigens ein Intel Core2Duo 2,6 GHz, 4GB RAM und ausreichend Plattenplatz.

Grüße
ViperNEo

23.05.2010 - 23:07 Uhr

Hallo Leute,

ich bin gerade dabei mir einen kleinen Musikplayer zu realisieren. Das ganze ist eher ein Spaßprojekt, um mich mal in so Themen wie Skins und allgemein der Umgang mit Audio einzuarbeiten.

Die Oberfläche und einige Basisfunktionen sind bereits fertig. Jetzt fehlt nur noch der Sound.

Grundsätzlich kenne ich BASS.FX und irrKlang. Beide Libs sind ganz okay aber ich würde das ganze gerne in Eigenregie umsetzen, zum einen um den Lerneffekt zu erhalten und zum anderen um die Anwendung schlank zu halten.

Nun dachte ich da an DirectX und DirectSound. Damit sollte das ganze ja recht gut umsetzbar sein. Kann ich mithilfe dessen auch zum Beispiel zwischen zwei Titeln faden ala Winamp?

Viel wichtiger ist mir jedoch die Sache mit dem Equalizer. Bin da schon länger auf der Suche und neben komplizierten mathematischen Formeln habe ich bislang nur Umsetzungen gefunden mithilfe von BASS.FX oder anderen kommerziellen Libs. Das löst daher nicht ganz mein Problem. Vielleicht kennt jemand etwas, hat sowas schonmal gemacht oder hat vllt ein paar Tips für mich 😃

Dankeschön! Schöne Feiertage noch!

Grüße
ViperNeo

21.05.2010 - 23:34 Uhr

hm... danke das funktioniert.

allerdings hat mir das nicht so gefallen. hab jetzt was gefunden: http://www.codeproject.com/KB/cs/globalhook.aspx

das funktioniert sehr gut 😃

//edit: nur leider nicht in meinem eigenen projekt... da bekomme ihc immer eine win32exception modul kann nciht gefunden werden.

21.05.2010 - 22:17 Uhr

Hallo Leute,

ich habe eine Anwendung entwickelt bei der ich einen kleinen Effekt einbauen möchte. Und zwar soll beim Verlassen der Form (MouseLeave-Event) die Form langsam auf 0.5 Opacity abgeschwächt werden. Beim wieder betreten der Form (MouseEnter) soll dann die FOrm wieder auf 1 gesetzt werden.

Soweit so gut. Das ganz funktioniert wunderbar auf der Form Oberfläche. Sobald ich aber ein anderes Control mit der Maus berühre wird das MouseLeave-Event aufgerufen.

Kann ich es irgendwie schaffen das die Form dann trotzdem kapiert das ich noch auf ihr bin? Habe schon überlegt das ClientRectangle mit der Mauskordinate zu vergleichen, aber gibts da vllt einen besseren WEg?

//edit: ich merke gerade das mit dem ClientRectangle wird nichts, da das MouseLeave-Event keine MouseEventArgs bestitzt....

Danke!

Grüße
ViperNeo

20.05.2010 - 11:00 Uhr

Sketchflow hat die gesuchten Controls 😉

19.05.2010 - 13:57 Uhr

okay, ich habe grad gemerkt das meine versuche auch so funktioniert hätten, wenn ich nicht den exbufferedgraphics genutzt hätte hier aus dem forum.... wenn ich nämlich e.graphics des onpaint nutze klappts über den exbufferedgraphics nicht....

danke!

19.05.2010 - 13:38 Uhr

Hallo Leute,

ich versuche gerade ein wenig einen GraphicsPath zu verstehen...

Und zwar versuche ich aktuell nur ein Rechteck zu zeichnen (ich weiß dafür gibts DrawRectangle). Ich möchte das aber selbstständig per PointArray erreichen.


            int left = 20;
            int width = 300;
            int right = left + width;
            int height = 20;

            Point[] tabPoints = new Point[] {					
					new Point(right, height),
                    new Point(right, 0),
                    new Point(left, 0),
                    new Point(left, height)
				};

byte[] types = new byte[tabPoints.Length];
            types[0] = (byte)PathPointType.Start;
            for (int i = 1; i < types.Length; i++)
            {
                types[i] = (byte)PathPointType.Line;
            }

            GraphicsPath path = new GraphicsPath(tabPoints, types);
            Matrix translateMatrix = new Matrix();
            translateMatrix.Translate(100, 100);
            path.Transform(translateMatrix);

            myBuffer.Graphics.DrawPath(new Pen(new SolidBrush(Color.Black)), path);

Das Ergebnis dieses gebildes ist ein halbes Rechteck... Das ist irgendwie komisch finde ich...

Kann mir jemand da etwas weiterhelfen? Eventuell hat ja jemand interessante Lektüre zur verwendung habe nämlich das Gefühl das es an der Reihenfolge liegt wie ich die Punkte anlege und auch wie viele es sind. Wäre cool wenn jemand ein paar Informationen hätte.

Danke!

Grüße
ViperNeo

16.05.2010 - 13:25 Uhr
  
Microsoft.Office.Interop.Outlook.MAPIFolder folder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);  
  

So komme ich an die Ordner. Ich dachte mir ich könnte dann mit folder.Parent an den übergeordneten Ordner gelangen, was nicht zu funktionieren schein.

Das funktioniert nicht so einfach. Du holst dir ein Objekt der Inbox rein. Diese hat in diesem Moment keinen Parent mehr. Ich weiß auch nicht genau ob es einen Parent gibt für die Inbox, Outbox etc.

16.05.2010 - 13:23 Uhr

die spalten benötigt man doch soweit ich das weiß nur in der detailansicht. hast du mal versucht eine andere ansicht zu wählen? ansonsten machen die spalten doch sinn.

16.05.2010 - 13:21 Uhr

wahrscheinlich gar nicht da das ein systemton sein wird. das kann doch jeder anwender in seinen persönlichen windows sound einstellungen festlegen.

ansonsten könntest du per KeyPress Event versuchen die ESC Taste abzufangen und einfach nichts zu machen per return.

Grüße
VIperNeo

11.05.2010 - 09:43 Uhr

hallo,
also mir ist keine möglichkeit bekannt, aber was ist denn das für eine frage warum es das nicht gibt^^

außerdem hast du ja schon richtig erkannt das es über user32.dll geht, warum? weil das eine systemeinstellung ist und betriebssystemabhängig. zu diesen zwecken bindet man eben die entsprechende dll ein und ruft die funktionen auf die einem die arbeit abnehmen.

08.05.2010 - 09:22 Uhr

leider scheint das nicht so einfach zu sein... weiter infos für dich:
Aero Glass: Erstellen von Spezialeffekten mit dem Desktopfenster-Manager
http://blog.bigbasti.com/windows-aero-glas-in-eigenen-projekten-nurzen-teil-3/
http://www.welt-held.de/1609-howto-aero-glass-in-c-forms-nutzen.html

aber die schaffen das auch irgendwie... schau dir doch mal den quellcode an. da kann man sicher was rausziehen:
http://www.codeproject.com/KB/toolbars/WinFormsRibbon.aspx

grüße
viperneo

07.05.2010 - 20:12 Uhr

alles was du selbst malst und schwarz ist wird transparent werden, daher gibt es ja diese methode.

ansonsten würde mich die sache mit den tabs echt interessieren. hatte da auch mal echt lange dran getüftelt bin aber gescheitert... vllt bist du ja so lieb und hilfst mir 😃

mehr als bislang kann ich dir leider nicht mehr helfen. bei drawthemetext kannst du ja auch das glow ignorieren. ist einfach ein verfügbarer bereich dieser methode. warum die schatten so komisch aussehen ist wirklich komisch. ich werde auch mal etwas tüfteln. vllt finde ich eine lösung für dich 😃

07.05.2010 - 19:56 Uhr

hm malst du die linien wirklich selbst? ich habs noch nie hinbekommen so schöne ränder links und rechts zu malen. wie machst du das?

ansonsten ist es grundsätzlich etwas schwerer auf der glasfläche zu malen. transparent werden schwarze flächen und eigentlich sollten normale linien kein problem darstellen. der button rest ist wirklich seltsam. hast du irgendwo noch eine paint methode überschrieben oder irgendwas? wird vllt dein vorhandener button dort am anfang gezeichnet und später verschoben... kann ihc mir auch nicht so richtig erklären..

edit... deine buttons sind doch grafiken oder? wenn ich das richtig sehe haben die einen leichten schatten deine linien. dieser schatten benötigt natürlich auch einen schwarzen hintergrund. wenn das transparente bilder sind, dann wird das so nicht klappen, da dieser alpha kanal im bild nicht unterstützt wird.

07.05.2010 - 19:44 Uhr

Hier das Zauberwort:


[DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
        private static extern int DrawThemeTextEx(IntPtr hTheme, IntPtr hdc, int iPartId, int iStateId, string text, int iCharCount, int dwFlags, ref RECT pRect, ref DTTOPTS pOptions);


        private const int DTT_TEXTCOLOR       = 1 << 0;        // crText has been specified
        private const int DTT_BORDERCOLOR     = 1 << 1;        // crBorder has been specified
        private const int DTT_SHADOWCOLOR     = 1 << 2;        // crShadow has been specified
        private const int DTT_SHADOWTYPE      = 1 << 3;        // iTextShadowType has been specified
        private const int DTT_SHADOWOFFSET    = 1 << 4;        // ptShadowOffset has been specified
        private const int DTT_BORDERSIZE      = 1 << 5;        // iBorderSize has been specified
        private const int DTT_FONTPROP        = 1 << 6;        // iFontPropId has been specified
        private const int DTT_COLORPROP       = 1 << 7;        // iColorPropId has been specified
        private const int DTT_STATEID         = 1 << 8;        // IStateId has been specified
        private const int DTT_CALCRECT        = 1 << 9;        // Use pRect as and in/out parameter
        private const int DTT_APPLYOVERLAY    = 1 << 10;       // fApplyOverlay has been specified
        private const int DTT_GLOWSIZE        = 1 << 11;       // iGlowSize has been specified
        private const int DTT_CALLBACK        = 1 << 12;       // pfnDrawTextCallback has been specified
        private const int DTT_COMPOSITED      = 1 << 13;       // Draws text with antialiased alpha (needs a DIB section)
        private const int DTT_VALIDBITS       = DTT_TEXTCOLOR | DTT_BORDERCOLOR | DTT_SHADOWCOLOR | DTT_SHADOWTYPE | DTT_SHADOWOFFSET |
                                                DTT_BORDERSIZE | DTT_FONTPROP | DTT_COLORPROP | DTT_STATEID | DTT_CALCRECT |
                                                DTT_APPLYOVERLAY | DTT_GLOWSIZE | DTT_COMPOSITED;


public static void drawGlowingText(Graphics graphics, string text, Font font, Rectangle bounds, Color color, TextFormatFlags flags, bool drawGlow, int glowSize)
        {
            IntPtr hdc = graphics.GetHdc();
            IntPtr hDC = CreateCompatibleDC(hdc);

            BITMAPINFO structure = new BITMAPINFO();
            structure.biSize = Marshal.SizeOf(structure);
            structure.biWidth = bounds.Width;
            structure.biHeight = -bounds.Height;
            structure.biPlanes = 1;
            structure.biBitCount = 0x20;
            structure.biCompression = 0;

            IntPtr hObject = CreateDIBSection(hdc, structure, 0, 0, IntPtr.Zero, 0);
            SelectObject(hDC, hObject);
            IntPtr ptr4 = font.ToHfont();
            SelectObject(hDC, ptr4);

            VisualStyleRenderer renderer = new VisualStyleRenderer(VisualStyleElement.Window.Caption.Active);

            DTTOPTS pOptions = new DTTOPTS();
            pOptions.dwSize = Marshal.SizeOf(typeof(DTTOPTS));
            if (drawGlow)
                pOptions.dwFlags = DTT_COMPOSITED | DTT_TEXTCOLOR | DTT_GLOWSIZE;
            else
                pOptions.dwFlags = DTT_COMPOSITED | DTT_TEXTCOLOR;
            pOptions.iGlowSize = glowSize;
            pOptions.crText = ColorTranslator.ToWin32(color);

            RECT pRect = new RECT(0, 0, bounds.Right - bounds.Left, bounds.Bottom - bounds.Top);
            DrawThemeTextEx(renderer.Handle, hDC, 0, 0, text, -1, (int)flags, ref pRect, ref pOptions);
            BitBlt(hdc, bounds.Left, bounds.Top, bounds.Width, bounds.Height, hDC, 0, 0, 0xcc0020);
            DeleteObject(ptr4);
            DeleteObject(hObject);
            DeleteDC(hDC);
            graphics.ReleaseHdc(hdc);
        }

Das verwende ich um schwarzen Text mit weißem Glühen zu erstellen wie die Titeltexte der Fenster. Bau dir einfach das Glühen raus. Ansonsten gibts über Google genug zu dem Thema 😉

GRüße
ViperNeo

01.05.2010 - 17:13 Uhr

hey leute,

ich habe zu dem thema grundsätzlich mal ne frage und zwar wann macht es denn sinn und wann kommt man auf die idee einen eigenen compiler zu schreiben oder schreiben zu müssen? das thema finde ich interessant finde aber irgendwie den ansatz nicht dazu.

danke 😃

grüße viperneo

21.04.2010 - 12:53 Uhr

also ich blicke nicht ganz durch durch dein beispiel und ich glaube du machst es dir unnötig kompliziert...

ich habe mal ein beispiel angehängt. dort wird in einer wpf klassenbibliothek ein ribbon menü erstellt. dieses wird per elementhost in winforms gehostet und ein durchgeschleiftes event für den ersten button abonniert und ausgewertet.

also prinzipiell funktioniert das so recht einfach.

aber wie schon gesagt würde ich dir für winforms mal den link zu codeproject oben empfehlen, da musst du dir keine umstände mit wpf bauen.

aber sonst viel spaß damit! wo arbeitest du eigentlich in lampertheim wenn ich fragen darf? 😃

21.04.2010 - 12:09 Uhr

grundsätzlich gibt es auch die möglichkeit ohne betrieb die ausbildung zu vollenden. zumindest den schulichen teil kann man ohne betrieb machen. den praktischen teil der handelskammer kann man mit glück auch ohne machen, da man die praxis ja soweit mitbekommen hat. mit neuem betrieb, der eigentlich zu finden sein dürfte über die handelskammer, gibts natürlich absolut keine probleme. aber in der regel wird man nicht kurz vor ende gekündigt sondern direkt nach abschluss der ausbildung einfach nicht übernommen.

20.04.2010 - 18:43 Uhr

kannst du das mal in ein kleines beispiel packen und hochladen? dann schau ichs mir mal an.
grüße

20.04.2010 - 12:45 Uhr

du definierst im wpf ein event dass du beim aufruf eines buttons auslöst. dieses event abonnierst du über den elementhost in der winforms anwendung. schon haste das event durchgeschleift.

17.04.2010 - 21:38 Uhr

Hallo Leute,

ich lese mich gerade durch dieses Kapitel:
http://openbook.galileocomputing.de/csharp/kap23.htm

Ich habe meine Events bislang immer einfach so entwickelt:



        public event EventHandler ContentChanged;
        private void OnContentChanged(EventArgs e)
        {
            EventHandler ev = ContentChanged;
            if (ev != null) ev(this, e);
        }


Nun lese ich dort jedoch grundsätzlich nur Einsatz mit Delegaten und darüber hinaus noch die Empfehlung mit Hashtables die Instanzen zu speichern... Irgendwie verwirrt mich das aber, habe anscheinend grundlegend etwas nicht verstanden und hoffe das mir vllt ein schlauer Fuchs hier im Forum das mal genauer erläutern kann. Zum einen wüsste ich gerne wofür man Delegaten eigentlich jetzt genau braucht und zum anderen wie man seine Events in welchen Anwendungsfällen im sinnvollsten deklariert.

Danke schonmal!

Grüße
ViperNeo

16.04.2010 - 12:12 Uhr

hm an sowas hatte ich auch gedacht, bin aber irgendwie daran gescheitert, da ich finde das das unglaublich inperformant ist immer bei einem resize die suche auszuführen...

16.04.2010 - 09:49 Uhr

Hat hier niemand eine Idee?