Laden...
P
proper_csharp myCSharp.de - Member
Softwareentwickler / Dipl.Ing(FH) D / Lkr. FFB (Bayern) Dabei seit 30.10.2006 60 Beiträge
Benutzerbeschreibung

Forenbeiträge von proper_csharp Ingesamt 60 Beiträge

17.03.2010 - 11:21 Uhr

Hallo j0sh,

herzlich willkommen hier.
Es gibt beispielsweise unter Windows Mobile im Compact Framework bzw. im Windows Mobile 5 SDK bereits fertige Funktionen zum Auslesen der Position.

  • je nach verwendeter Zielplattform eben gleich nutzbar

Wenn du keine solche Zielplattform hast:
Rein prinzipiell betrachtet, ist eigentlich jeder GPS Receiver in der Lage, via (virtuellem) seriellen Port als ASCII seine Informationen zu senden.
Du kannst also - wenn du ganz tief unten einsteigen willst / musst, einfach eine solch serielle Schnittstelle öffnen und die Zeichenketten interpretieren.

Was da kommt, ist relativ genau definiert.

Stichwort ist da 'NMEA 0183'. Da findest du z.B. bei Wikipedia auch was.

Gruß
proper_csharp

27.02.2010 - 15:28 Uhr

Danke an alle. Sind sehr interessante Komponenten dabei.

Was auch gut ist (für meine Zwecke)

http://www.devcomponents.com/

Hat einen Preis für Sourcecode, Demoprojekte und kostet keine Runtime. Habe es schon mal kurz getestet und macht einen guten Eindruck.

Manche anderen Komponenten sind 'oversized' für mich und kosten neben ca. 3000€ Anschaffung noch ca. 50-100€ Runtime je Client.

Danke.

27.02.2010 - 11:15 Uhr

Super, vielen Dank an alle.
War gestern abend wohl doch etwas sehr spät, als ich das versucht habe 😉

...als Binding (wobei Foo die Property ist, an die gebunden werden soll):
DockPanel.Dock="{Binding Path=Foo}" ...

ist das was ich brauche. Habe da viel zu kompliziert gedacht (DataTrigger)
Meine Property 'Foo' habe ich nun jetzt als Typ string umdefiniert, der "Left" oder "Top" liefert und gut ist. War vorher bool.

Hätte jetzt klar auch per Converter funktioniert, aber so ist es am einfachsten.

Danke.

27.02.2010 - 09:58 Uhr

Hallo,

suche eine Möglichkeit, anstatt fix in XAML ein


DockPanel.Dock="Left"

in Abhängigkeit eines internen Wertes eines Objektes eben wahlweise auch mal ein


DockPanel.Dock="Top"

zu setzen.

Irgendwie bin ich da mit meinen Versuchen via DataTrigger gescheitert.
Stehe da irgendwie auf dem Schlauch 😉

Wie geht das per C# Code oder als {Binding} in XAML ?
Schon mal Danke für eine Hilfe.

12.02.2010 - 14:25 Uhr

Hallo,

bin auf der Suche nach einer C# Library / Komponente, mit der ich in einem WPF Projekt eine Ansicht wie eine Art Plantafel (= manueller Leitstand) haben kann.

Also Tage / Monate nach rechts und je Zeile in diesem 'Kalender' programmtechnisch beispielsweise einen Mitarbeiter oder eine Maschine, der ich eben 'farbige Rechtecke' zuordnen kann und diese per Maus verschieben kann als Tätigkeit in diesem Zeitraum.
Es geht nur um die 'schöne Darstellung', also nicht um die Funktionalität / Logik 'Leitstand' selber. Dass ich das programmieren muss, ist mir klar.

Kann mir da einer etwas empfehlen, das er selber schon eingesetzt hat?
Soll unter XP und W7 laufen und möglichst keine extra Runtime kosten, sondern nur eine einmalige Entwicklerlizenz.
Hoffe, konnte ausdrücken, was ich will

Danke für jeden Hinweis.

10.11.2009 - 08:28 Uhr

Hallo zusammen,

danke erst mal für den bisherigen Feedback. Weitere Meinungen oder Erfahrungen sind gerne willkommen.

Gruß

09.11.2009 - 00:08 Uhr

Hallo mcpd,

zwei Dinge würde ich mal versuchen:

**public **void Install_Committing ...

und eventuell eine **try / catch **in 'Install_Committing'

Gruß
proper_csharp

08.11.2009 - 23:17 Uhr

Hallo,

habe eine Frage zur Verwendung von Visual Studio 2008 Prof (D) ('braunrötliche Box').

Verwende es bisher unter Windows XP Prof. Ist ganz normal brav aktiviert bei Microsoft für diesen Rechner.
Möchte nun GENAU diesen Recher eventuell umbauen (weitere Platte) und da Windows 7 mir installieren. Eventuell DualBoot zum alten XP.

Wenn ich jetzt umsteige auf W7, muß ich ja eine Vollinstallation des OS machen.
Kann ich da anschließend das VStudio draufspielen und mit meiner Lizenznummer dieses wieder problemlos aktivieren - diesmal für W7 auf GENAU diese Rechner, wo es schon für das alte XP aktiviert war? Oder ist die Aktivierung 'verbrannt' (d.h. eine neue Aktivierung gehe zusätzlich nie)?

Bei Microsoft finde ich da unter Lizenzinfo bei MS

....
b. Lizenzmodell. Die Software wird auf Nutzerbasis lizenziert.
2. RECHTE ZUR INSTALLATION UND NUTZUNG.
a. Allgemeines. Ein Nutzer ist berechtigt, Kopien der Software zu installieren und zu verwenden, um Ihre Programme
zu entwerfen, zu entwickeln, zu testen und vorzuführen.
...

Das verstehe ich da jetzt nicht (bin kein Jurist leider 😉 )

Dürfte ich diese Version übrigens auch zusätzlich auf MEINEM Notebook parallel installieren (siehe oben 'Kopien zu installieren') ? Habe das erst jetzt genau gelesen und würde das natürlich auch gerne machen, wenn das OK wäre.

Beide Rechner verwende ausschließlich ich.

Wer kennt sich da genau aus?

Danke für eine Antwort.

Edit @herbivore
zu 'meine / Ihre ' Programme:
Sehe ich auch so, steht aber original so - ist herauskopiert 😉

26.10.2009 - 10:01 Uhr

Hallo Midnight Run,

da die Dateien ja bereits auf eibnem Windows System gespeichert sind, sollte das Problem eigentlich in deiner Applikation nicht auftreten.

Windows hat eine max. Pfadlänge / Namenslänge von 260 Zeichen. Bei "C" gabs da ne Konstante MAX_PATH, die eben auf 260 definiert war.

Du musst halt in deiner Applikation auch solch einen konstanten Wert vorsehen, wenn du irgendwelche API Aufrufe machst im Bereich von Pfaden oder Dateinamen. Dann dürfte das Problem weg sein.

Gruß
Proper_csharp

14.10.2009 - 13:10 Uhr

Hallo Carmani,

such einfach im Forum nach 'mutex' da findest du einige Artikel (auch als FAQ) und Beispiele.
Oder auch nach 'mehrere Programminstanzen'

Gruß
proper_csharp

30.09.2009 - 23:21 Uhr

Hallo zusammen,

habe in einer WPF Applikation ein System.Windows.Controls.WebBrowser Element.
Wenn ich **lokal **vorhandene Flash Dateien (.SWF) ausführen will,

this.myWebBrowser.Navigate(uri);

kommt immer eine Sicherheitswarnung

Das Anzeigen aktiver Inhalte, die auf den Computer zugreifen können, wurde für diese Datei aus Sicherheitsgründen eingeschränkt.

Habe jetzt eigentlich lange gesucht und verschiedene vermeintliche Tips probiert bzw. gefunden ( 'file://127.0.0.1/X$/pfad/name' oder MOTW (Mark of the Web) ), aber die Meldung kommt immer.

Hat da jemand einen Tip, wie ich solch **lokale **SWF OHNE diese Warnung abspielen kann (meist unter XP SP3) ?

EDIT: Hat keiner eine kleine Idee 😉
Danke
proper_csharp

28.09.2009 - 21:09 Uhr

Hallo Maddy,

hast du vielleicht noch wo einen Timer mit Callback Funktion laufen, den du eben nicht sauber beendet hast vor dem vermeintlichen Beenden der MainForm?

Solch ein Phänomen hatte ich auch mal - die Lösung war das saubere Beenden des Timers.
Timer sind - je nach Art des Timers (System, Form) - auch Threads.

Gruß
Proper_csharp

26.09.2009 - 23:07 Uhr

Hallo Jelly,

zwei Dinge, was du mal versuchen könntest:

  1. Mit 'Process Monitor' von Sysinternals.com (was jetzt zu Microsoft gehört) mitprotokollieren, welche Dateien gesucht werden, welche Registry Einträge gelesen werden und da schauen, ob bei deinem Start über 'All User' irgendwo ein verdächtiges 'File not found' oder in der Registry 'Name not found' zu finden ist, wo deiner Meinung nach der Eintrag aber da sein sollte.

Also weil es vielleicht daran liegt, dass ein bestimmter Registryeintrag nicht da ist.

Das kostenlose Tool findest du unter

Process Monitor von Sysinternals

EDIT: Man kann natürlich sowohl Filter auf die gewünschten Prozesse setzen als auch das Loggen zum 'rechten' Zeitpunkt ein/ausschalten. Dann werden es entsprechend weniger Einträge als ob man alle laufenden Prozesse mitprotokolliert.
Dies als (verspäteter) Hinweis 😉

Falls das nichts bringt:
2. Mitprotokollieren was im MSI nachinstalliert wird

Du könntest versuchen, als User die msiexec von Hand aufzurufen.

Die msiexec kann man mit verschiedenen Parameter aufrufen
Siehe dazu msiexec /?
Du solltest da mit cmd dich auf das Verzeichnis setzen, wie deine msi liegt.
Dann mit


msiexec /i <name deiner msi> /log  .\meinlog.txt  

mal schauen, was danach im Protokoll steht. Er frägt dich da vielleicht nach 'Reparieren', da dann halt dies auswählen.

Gruß
Proper_csharp

26.09.2009 - 19:50 Uhr

Hallo Lixtop,

zur Frage 1:
Das Setupprojekt anwählen und dort die Eigenschaften anschauen (Visual Studio 2008 Prof.Edition). Was du dort bei Manufacturer und ProductName angibst, steht nachher in diesen entsprechenden Platzhaltern. (Siehe Bild im Anhang)

zur Frage 2:
es gibt (zumindest generell gültig für 'Windows Installer') eine Übersicht bei Microsoft.
(Ich weiß jetzt aber nicht, ob man die alle hier verwenden kann, aber eigentlich kommt ja am Schluß ein MSI raus)

MSI Property Übersicht in MSDN

Gruß
proper_csharp

26.09.2009 - 19:04 Uhr

Hallo zusammen,

habe den Vorschlag von michlG umgesetzt. Falls jemand das mal braucht:


<GridViewColumn x:Name="colVorder" Header="Meine Spalte 1" Width="Auto" >
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <Grid  Width="{Binding ElementName=colVorder, Path=ActualWidth}" HorizontalAlignment="Center" VerticalAlignment="Center">
            <CheckBox IsChecked="{Binding Path=myalwaysontop}"  HorizontalAlignment="Center" ToolTip="immer im Vordergrund"/>
            </Grid>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

@michlG: Danke für den Tip!

Funktioniert prima und bei 'Ziehen' der Spalte in die Breite wird automatisch immer richtig neu zentriert.

Gruß
Proper_csharp

23.09.2009 - 13:06 Uhr

Hallo zusammen,

würde gerne in meinem WPF GridView in einer Spalte, die jeweils eine Checkbox enthält, diese Checkbox in der Mitte der Spalte darstellen.

Aktuell 'hängt' das Recheck der Checkbox ganz links.

(Siehe Bild als Anhang)

Hat da einer einen Tip?


<GridViewColumn  Header="meine Spalte 1"  Width="Auto">
  <GridViewColumn.CellTemplate>
    <DataTemplate>
      <CheckBox IsChecked="{Binding Path=myalwaysontop}" HorizontalAlignment="Center" VerticalAlignment="Center" />
      </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

Gruß
proper_csharp

19.09.2009 - 22:49 Uhr

Hallo lord_fritte,

vielleicht auch interessant - für Windows Mobile 5 / 6.x gibt es mittels SDK eine Abstrahierung bei der GPS Abfrage:
Windows Mobile 5 SDK - GPS Intermediate Driver Reference

Du musst da also nicht den NMEA Code selber interpretieren (was ich selber schon mal gemacht habe 😉 ) sondern kannst einfacher dir die Position holen.

"The parsed API is one of the two interfaces provided by the GPS Intermediate Driver for accessing GPS information. Applications that use the parsed API do not need to write code to parse NMEA strings returned by the GPS hardware. Instead, they leave the parsing to the GPS Intermediate Driver.

In contrast, the raw interface provides access to the NMEA strings. For more information about accessing raw GPS information, see Accessing Raw GPS Data. For a comparison between the two interfaces, including benefits of each, see GPS Intermediate Driver Architecture."

Wie du im 'Thema' schreibst, hast du ja WMobile.

Gruß
Proper_csharp

16.09.2009 - 23:38 Uhr

Hallo pdelvo,

es gibt doch die Eigenschaft '.Primary' bei den Instanzen der Screen. Wenn es der 'Primary' ist, ist das 'true'.
Ferner kannst du über das Rectangle von '.Bounds' (linke Ecke bei 0 oder eben nicht) auch noch rausfinden, ob quasi die Auflösungen 'aufaddiert' sind. Der zweite Monitor (wenn er den Desktop erweitert) fängt dann eben nicht bei 0 an, sondern ein Pixel nach Auflösung des ersten Monitors.

Bei .DeviceName steht dann übrigens noch immer "\.\DISPLAY1<muell>" bis "\.\DISPLAYn<muell>".
Kann man auch zur Diagnose nutzen.

Pseudocode:


System.Windows.Forms.Screen[] myAllScreens =    System.Windows.Forms.Screen.AllScreens;
if (myAllScreens != null)
{
   foreach (System.Windows.Forms.Screen scrTempScreen in myAllScreens)
   {
        <tuwas> = scrTempScreen.DeviceName;
        <tuwas> = scrTempScreen.Primary;
        <tuwas> = scrTempScreen.Bounds;
   }
}

Hoffe, da war was für dich dabei.

Gruß
Proper_csharp

16.09.2009 - 23:18 Uhr

Hallo Loewchen0507,

habe sowas zwar nicht selber gemacht, aber zu später Stunde ist ja ein erster Hinweis, was du suchen könntest, auch was 😉

Stichwort:
VSTO - Visual Studio Tools for Office

Arbeitskollege hat das mal gemacht und geht gut. Hat damit z.B. ein AddIn für Word 2007 erstellt, dient zum Art Formular ausfüllen.

Gruß

Proper_csharp

18.08.2009 - 23:14 Uhr

Hallo meisteralex,

weiss nicht, ob ich die Frage so ganz verstanden habe 😉

Ich würde mal den Ansatz versuchen, im ListView einen TextBlock zur Darstellung der Strings in den Zellen zu verwenden und dort eben das Gefundene mit 'Run' und Setzen der VordergrundFarbe markieren.

Hoffe, dir mit dem Ansatz geholfen zu haben.

11.08.2009 - 00:25 Uhr

Hallo nico2009,

habe mal folgendes kurz ausprobiert - ich bekomme vernünftige Werte. Die RECT Struktur musst du anlegen, dann geht es.

EDIT:
Siehe auch bei Progi123. Da wäre auch noch eine Konvertierung, falls gewünscht.


       public IntPtr GetWindowHandle(string processNamePart)
        {
            System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process p in processes)
            {
                if (p.MainWindowTitle.Contains(processNamePart))
                    return p.MainWindowHandle;
            }

            return new IntPtr(0);    // nicht gefunden
        }
        [DllImport("user32.dll", SetLastError = true)]
        static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }


Dann testweise verwendet (sinnfreier dummy-Code, im Debugger Werte angesehen)


                RECT windowRectangle;
                GetWindowRect(GetWindowHandle("Windows Task-Manager"), out windowRectangle);
                int links = windowRectangle.left; 
                return;

Gruß

10.08.2009 - 23:24 Uhr

Hallo nico2009,

herzlich willkommen hier.
Auf jeden Fall solltest du mit der normalen API Funktion GetWindowRect die Abmessungen bekommen, denke ich.

Ohne es jetzt direkt per Code ausprobiert zu haben, solltest du die API - Funktion entsprechend deklarieren und dann kannst du sie verwenden.


 [DllImport("user32.dll", SetLastError = true)]
        static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect); 

Gruß

EDIT @michlG
Passt schon - beide Beiträge zusammen machen es erst rund 😉

24.01.2009 - 17:56 Uhr

Hallo Sebastion120184,

hast du bei deinem HauptWindow (ist ja kein WPF, sonern Windows.Forms) mal geschaut, ob da vielleicht die Eigenschaft .TopMost = true gesetzt ist?

Das könnte da reinspielen (ungetestet von mir).

Gruß
Proper_CSharp

[Edit] hat sch mit meinem Vorredner wohl zeitlich überschnitten, aber wir sind dergleichen Meinung ...

21.01.2009 - 21:13 Uhr

Hallo cico,

meines Wissens läuft die Darstellung auf das Control 'WebBrowser' aus Windows.Forms hinaus. In WPF direkt habe ich nichts entdeckt gehabt, aber damit kann man auch ShockWave Dateien abspielen.

Gruß
Proper_CSharp

12.01.2009 - 23:43 Uhr

Hallo el_patschino,

ja was ist es denn für ein Projekt (Konsole, ..) und was für ein Framework (3.5,..)

Vielleicht kannst ja mal das als Miniprojekt per ZIP/RAR hier anhängen.

Gruß
proper_csharp

12.01.2009 - 23:34 Uhr

Hallo el_patschino,

habe ein kleines C# Konsolenprojekt angelegt (VStudio 2008 Express, Vista) und nur genau deinen C# Code dort eingebaut (kopiert). Funktioniert wunderbar.

Mal dumme Frage:
Hast du mal verifiziert, daß du da wo die EXE angelegt werden soll, auch Schreibrechte hast bzw. nicht schon eine gleichnamige schreibgeschützte EXE oder ein Verzeichnis mit genau diesem Namen liegt? (Das mit dem Verzeichnis hatte ich schon mal, kam von einem Absturz eines VStudio2005).

Oder läuft gerade bereis eine solch schon erstellte EXE im Hintergrund' (schaue mal im TaskManager bei Prozessen)

Gruß
proper_csharp

12.01.2009 - 23:06 Uhr

Hallo moooki,

kenne jetzt zwar leider keine Magentkartenleser, sondern Barcodeleser, aber das Prinzip sollte sehr ähnlich sein.Im einfachsten Fall ist das Teil über USB wohl angesteckt, hat wahrscheinlich seinen eigenen Treiber und schleift dadurch einfach alle Daten in den Tastaturpuffer ein. Dann mußt du nur ein Eingabefeld aufmachen und du erhältst die Daten. Es erhält aber halt immer die Applikation die Daten, die den Focus hat. Unschön, aber eben einfach.

Eventuell ist jedoch vom Hersteller ein SDK dabei, mit dessen Funktionen du die Treiberschnittstelle öffnen, lesen und schließen müßtest. Dann mußt du halt nicht unbedingt den Focus haben und kannst wohl auch das Lesegerät 'konfigurieren'.

Tip:
Mach doch einfach mal ein Notepad auf und lese solch eine Karte ein. Im einfachsten Fall siehst du da dann ja gleich den ASCII-Text.

Gruß
Proper_csharp

04.01.2009 - 14:33 Uhr

Hallo,

bekomme es partout nicht hin, bei meinem WPF LisView Beispielprojekt eine Hintergrundfarbe im DataTrigger zu setzen. (siehe auch http://www.mycsharp.de/wbb2/thread.php?threadid=65543

Beispielhaftes Setzen der Vordergrundfarbe oder Fontgröße geht probemlos.


        <!-- Testweise rein -->
        <Style.Triggers>
            <!-- wenn ein Wert '+1' ist, GruenTon nehmen -->
            <DataTrigger Binding="{Binding mynumvalue, Converter={StaticResource PolarValueConv}}" Value="+1">
                <Setter Property="Foreground" Value="Green" />
            </DataTrigger>
            <!-- wenn ein Wert '0' ist, BlauTon nehmen -->
            <DataTrigger Binding="{Binding mynumvalue, Converter={StaticResource PolarValueConv}}" Value="0">
                <Setter Property="Foreground" Value="LightBlue" />
                <Setter Property="FontSize" Value="19" />
                <Setter Property="Background" Value="Yellow" />

            </DataTrigger>
            <!-- wenn ein Wert '-1' ist, RotTon nehmen -->
            <DataTrigger Binding="{Binding mynumvalue, Converter={StaticResource PolarValueConv}}" Value="-1">
                <Setter Property="Foreground" Value="Orange" />
                <Setter Property="FontSize" Value="17" />
                <Setter Property="Background">
                    <Setter.Value>
                        <LinearGradientBrush StartPoint="0,1" EndPoint="1,1">
                            <GradientStop Offset="0.0" Color="BlanchedAlmond" />
                            <GradientStop Offset="1.0" Color="PowderBlue" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>

Das gesamte kleine Codebeispiel ist im RAR Anhang (generic.xaml).
Problem ist, dass trotz schönem Setzen der Farben (grün, blau, orange) abhängig von Werten des Objektes und auch testweise erfolgreichem Setzen einer anderen Fontgröße ich es einfach nicht schaffe, abhängig von dem Wert (DataTrigger) dem jeweiligen StackPanel eine andere Hintergrundfabe zu geben. Habe es im Beispiel sowohl mit einer festen Farbe (yellow) als auch mit einem Brush versucht.

Wenn ich das StackPanel direkt in XAML auf EINE feste Hintergrundfarbe setze (rauskommentiert in Window1.xaml), geht das problemlos.

Kann mir da bitte jemand helfe - wie kann ich in dem kleinen Beispiel die Hintergrundfarbe abhängig von einem Datenwert setzen?

Bitte um Hilfe 🙁

Gruß
Proper_csharp

[Edit] Hat wirklich keiner eine Idee? 😭

28.12.2008 - 14:21 Uhr

@nguemmegne

Hallo, so nebenbei als Tip am Rande zu

... als Praktikumsaufgabe in der Bildverarbeitung:
In eine PicBox ein Bild mit dynamische größe erstellen danach ein Histogramm, Grauwert, Bitebenen, Farbinvertieren und noch mehr Sachen bearbeiten...

Im C# 2008 Codebook von J.Bayer findest du in Kapitel 16 viele Tips und
Codebeispiele zum Thema Bildbearbeitung mit C#.
http://www.juergen-bayer.de/buecher/csharpcodebook3/index.aspx

Da habe ich schon prima Anregungen geholt. Behandelt das meist für Windows.Forms und auch WPF.
Ich verdiene nichts am Buch 😁 bin aber auch immer froh, wenn mir einer sagt, 'wo es steht'.

Vielleicht habt ihr das ja in der Bibliothek.

Gruß
Proper_csharp

26.12.2008 - 23:00 Uhr

Hallo winSharp93,

wenn du meinst 🙂
Also VStudio 2008 Express Edition Projekt im RAR - rein als 'Test-Spielwiese' , ohne Anspruch auf Vollständigkeit und relativ sinnfrei - aber es zeigt eben Interessierten, wie man zur Ausgabe laut obigem Screenshot kommt.

Wenn es wer brauchen kann (und wenn es nur zum Erfahrung sammeln geht), gerne. Feedback oder Erweiterungen auch gerne willkommen.

Gruß
Proper_csharp

[Edit] Testprojekt bzw. RAR modifiziert. Farbe in der Ausgabe, abhängig von einen Zahlenwert des jeweiligen Objektes, Projekt etwas aufgeräumt.
[Edit] Irgendwie kann ich nur eine Datei als Anhang hier speichern, deswegen ist der neue Screenshot nicht dabei 😭
Und als weitere Infoquelle: http://www.codeproject.com/KB/WPF/HiliteListViewItemsInWPF.aspx

26.12.2008 - 00:30 Uhr

Hallo winSharp93,

vielen Dank für deine Info.
Der Link ist ein guter Ansatz. Damit und auch mit dem Buch "ProWPF in C# 2008" ( Beispiele in Kapitel 18 ) habe ich prinzipiell genau das Aussehen erreicht, das ich will.

Kann jetzt nicht unbedingt sagen, dass ich da schon alles verstanden habe 😁 - aber der Einstieg ist da.

http://www.prosetech.com/ und dort dann 'Download the code'.

Wie es aussieht, siehe im Anhang. Sollte Bedarf am Code sein, kann ich es hier als ZIP ablegen, wenn entsprechende Nachfrage.

Gruß
Proper_csharp

25.12.2008 - 15:17 Uhr

Hallo,

möchte aus einer DB je Datensatz sagen wir mal zwei Felder ausgeben. Mit einem WPF ListView und GridView bekomme ich auch schön eine Liste mit untereinander dargestellten Daten, angebunden per ObservableCollection.


<Window x:Class="WpfApplicationAnwesenheitsDB.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="257" Width="408">
    <Grid>
        <DockPanel Margin="20,9,20,11" Name="dockPanel1">

            <ListView  Name="MyActualBaseContents"  Margin="16,22,15,26"    
                    SelectionMode="Extended" Tag="{Binding Path=ID}">
                <ListView.View>
                    <GridView >
                        <GridView.Columns >
                            <GridViewColumn  DisplayMemberBinding="{Binding Path=myname}" Header="Name" >

                            </GridViewColumn>
                            <GridViewColumn DisplayMemberBinding="{Binding Path=myinfostring}" Header="Info" ></GridViewColumn>
                        </GridView.Columns>
                    </GridView>

                </ListView.View>
            </ListView>

        </DockPanel>
    </Grid>
</Window>

So weit so gut.

Ich hätte aber gerne so eine Art Darstellung wie im Explorer bei "Symbolen", d.h. eine Art TileView, um mehr Datensätze gleichzeitig darstellen zu können. Also je nach aktueller Ausdehnung des Controls eben auch die Datensätze nebeneinander.
Geht sowas (einfach) und wenn ja - wie?

Also die Datensätze, die normalerweise eben dann nur per Scrollbar erreichbar waren, nun 'daneben'?. Dass eventuell die Spaltenüberschrift dann weg sei, wäre ok.

(siehe wrapped_listview.jpg)
Bin für jede Info dankbar.

16.12.2008 - 22:50 Uhr

Hallo marff,

vielleicht liege ich da falsch - aber der Button bewegt sich ja wohl nicht von selber, sondern soll vielleicht von der Maus bewegt werden, wenn ich das so 'erahne' was du vielleicht vor hast?
Da gibt es doch dann aber den PreviewMouseMove und den MouseMove, meine ich. Und wo du die Maus beim (ruhenden) Button am Anfang geklickt hast (also die relative Position des Mousezeiger zum/im Button), kann man glaub' schon errechnen.

Dann also diesen Versatz - der ja weiter konstant ist, denke ich - zur jeweiligen Mausposition im MouseMove Event dazurechnen und du hättest die Positionen des Rechtecks?

Vielleicht liegt meine Vermutung der Zielrichtung deines Programmes auch falsch, dann entschuldige. Ansonst vielleicht ja ein 'Workaround' ?

Gruß

14.12.2008 - 23:55 Uhr

Hallo Keimax,

unter Vista im Explorer rechte Maustaste, da steht dann dann zusätzlich zum 'Öffnen' auch 'Öffnen mit...'.

Dieses dann anwählen, dort dann 'Standardprogramm' auswählen.
Unter XP musste man, glaub ich, noch SHIFT oder CTRL drücken, falls schon eine Anwendung damit verknüpft war.

Im Prinzip läuft das auf einen Registryeintrag hinaus, in dem die Extension mit deinem Programm verknüpft ist.
Den Eintrag weiss ich jetzt leider nicht auswendig, aber google mal mit 'registry' und 'shell' 'open' 'command'.

Gruss
Wolfram

14.12.2008 - 23:36 Uhr

Hallo sebastian.b

also so wie ich das von Windows Mobile 5.x Geräten bzw.von CE 5.0 Geräten her kenne, auf denen das Compact Framework 2.0 läuft, gibt es da keine Funktion im Compact Framework. Compact 3.5 habe ich leider noch keine Erfahrung.

Vielmehr ist das normalerweise so gewesen, dass vom jeweiligen Gerätehersteller ein entsprechendes SDK erhältlich ist, das im Bereich WLAN z.B. die entsprechenden Verschlüsselungen und das ganze Umfeld (WPA,TKIP,Key...) ansprechbar macht.

Schau doch mal auf der Webseite des Geräteherstellers, ob es da kein SDK gibt.

Viellleicht täusche ich mich auch und sowas gibt inzwischen im Compact 3.5.

Gruß

14.12.2008 - 11:54 Uhr

Hallo Kleba,

normalerweise hat so ein Gerät eine Defaulteinstellung, die irgendwo im Handbuch steht (z.B. 4800Baud, NoParity, 8bit, ...). Dein Programm sollte auf jeden Fall einen kleinen Dialog haben, wo man aus einer Combobox diese paar diskreten Werte (2400,4800,9600,19200,..) einstellen darf, ebenso Parity (None,..).
Alternativ natürlich wo in einer (XML)Konfig z.B. das steht.

Manche Programme, die serielle / Bluetooth - GPS Receiver z.B. abfragen, suchen einfach in eine Setup auf Anforderung dann alle COMx / Baudrates in einer Schleife durch, bis sie 'vernünftige' Daten bekommen. Die tun sich natürlich leichter, da sie wissen, was 'vernünftig' ist (=NMEA Strings). Ist aber halt auch eine Möglichkeit.

Noch eine Info (vielleicht ist dir das eh' schon klar, dann entschuldige):

  1. Ein industrieller Barcode - Reader hat normalerweise aber auch selber einen Setupmode, bei dem er nach Erhalt eines 'Initialisierungsbarcodes' dann aus einem Ausdruck / gedruckten Handbuch mehrere Barcodes einlesen kann, die u.a. auch die Baudrate der seriellen Schnittstelle enthalten.

  2. Barcode - Reader könne alternativ aber auch direkt in den Tastaturpuffer schreiben, dann erhält eben die aktuell den Focus habende Applikation den gescannten String in den Eingabepuffer. DA muss man im Programm gar nichts machen, dafür kommt es halt immer bei dem an, der den Focus hat. Da muss man dann eine herstellerabhängige Art 'DataWedge' starten. Ist halt, wenn die SW auf dem Reader (Windows CE,..) selber läuft, interessant.

  3. Eine - herstellerabhängige - API (SDK) erlaubt meist, einen Barcode Reader dann auch quasi 'raw' anzusprechen. Muss man halt echt mehr programmieren als bei '2.' aber man könnte bei jedem Eingabefeld z.B auf eine maximale/minimale Leselänge umstellen oder z.B auf einen anderen Barcodetyp (Code039,...).
    Ist halt auch, wenn die SW auf dem Reader (Windows CE,..) selber läuft, interessant.

Gruss

13.12.2008 - 22:49 Uhr

Hallo Kleba,

das mit dem 'Handshake' kann durchaus was damit zu tun haben. Wenn dir das gar nichts sagt, so schau' mal in Wikipedia unter 'Datenflusskontrolle' nach
http://de.wikipedia.org/wiki/Datenflusskontrolle

Das besagt eigentlich ganz bildlich gesprochen, dass je nach 'handshake' der Sender erst anfängt, wenn der Empfänger bereit ist - bzw. der Empfänger sagt 'du bist mir zu schnell, warte erstmal'.

Dazu gibt es ein Hardware Handshake (RTS / CTS), was meint, dass ein Pegel gesetzt wird. Das ist am 'sichersten'.
Ein Software Handshake sendet ein bestimmtes Zeichen (XON / XOFF), dass es losgehen soll bzw. dass Ende ist.
Die Übertragungsrate (Baudrate) muss natürlich auch stimmen, was meint, dass beide mit der selben Geschwindigkeit was auf die Leitung geben.

13.12.2008 - 22:07 Uhr

@See Sharp

Hallo und danke für die Antwort,

also genau das habe ich versucht und da kommt zur Laufzeit eine Exception

System.InvalidOperationException ist aufgetreten.
Message="&quot;AllowsTransparency&quot; kann nach dem Herunterfahren von &quot;Window&quot; nicht geändert werden."
Source="PresentationFramework"
StackTrace: .....

Wenn ich das im Konstruktur nach InitializeComponents mache, würde das wunderbar funktionieren. Aber eben nicht, wenn ich das auf einen Button lege beispielsweise.
(Opacity war Schreibfehler).

Danke

13.12.2008 - 21:51 Uhr

Hallo,

kann ich unter WPF ein Window, das in XAML AllowsTransparency="false" hat, per C# Code zur Laufzeit auf true (und später wieder false) setzen?

Hintergrund der Frage ist, dass mein Fenster in XAML


AllowsTransparency="false"
WindowStyle="None" 
Opacity="3" 
ResizeMode="CanResizeWithGrip"

zur Laufzeit in einem Art DesignMode diese schönen 'ResizePünktchen' unten rechts haben soll, jedoch KEINEN sichtbaren Rahmen.
Wenn ich das in XAML auf AllowsTransparency="true" setze und das Programm starte, passt das auch. Ansonst bekomme ich immer einen Rahmen von ein Paar Pixel angezeigt, den ich aber eben nicht will.

Ich würde dann zur Laufzeit AllowsTransparency umschalten und auch ResizeMode gerne von 'CanResizeWithGrip' auf 'None' schalten.

Geht das bzw. wie kann ich eben das per C# setzen und/oder gibt es auch einen anderen Weg?
Das AllowsTransparency soll zur 'normalen' Laufzeit auf 'false' wegen festgestellter schlechter Performance bei 'schwachen' Grafikchips, wenn dann im Fenster z.B. später ein Video laufen soll.

Danke für jede Hilfe.

20.11.2008 - 21:27 Uhr

Hallo muhQ,

vielleicht verstehe ich dein Problem auch nur nicht, aber müsste nicht die Methode
DragMove das machen, was du willst?
Gibt es allerdings - glaube ich - erst ab Framework 3.0


protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
    base.OnMouseLeftButtonDown(e);

    // Begin dragging the window
    this.DragMove();
}

20.11.2008 - 18:00 Uhr

Hallo,

also einen recht guten ersten Überblick findest du - per Google 😉 auch bei Microsoft auf Deutsch:

Übersicht über Drag u. Drop

Zumindest als Einstieg nicht schlecht, denke ich. Im Detail findest du natürlich dann im Forum hier weiter.

Gruss

Proper_2903

19.11.2008 - 01:24 Uhr

@Taladan

Danke Dir, hat mich auf die richtige Spur bzw. Idee gebracht, wie ich das gestalte.

Wunderbar.

Gruß
Proper_2903

17.11.2008 - 21:43 Uhr

Hallo,

möchte in WPF auf einer in XAML definierten ListView ein DoDragDrop im C# Code einbauen. Es genügt die ganze Zeile, ich muss nicht wissen, auf welcher Column der Zeile der Click war.

Allerdings schaffe ich es nicht 😭, einen MouseDown Klick Event auf eine ZELLE (ListViewItem) in XAML zu definieren, der dann auch tatsächlich ankommt.

Das DragDrop ist nicht das Problem - wenn ich das alles testweise in das SelectionChanged Event einbaue, klappt das prima.
Wenn ich in der Liste auf eine leere Zeile klicke, kommt auch der MouseDown (da brauche ich ihn aber nicht 😉 )
Wie muss ich das in XAML definieren, dass ich eben auch in einer 'belegten' Zeile mit MouseDown (Linke Maustaste dann abfragen) in meinen C# Code komme?

Bin um kleine (XAML) Beispiele sehr dankbar 😉
Danke
Proper_2903

07.11.2008 - 22:17 Uhr

@michlG

Vielen Dank für die prima Links.

Habe soweit erstmal genug Info gefunden, um damit zu testen.

@alle:
Ein rudimentäres Beispiel in XAML ist:


<Window x:Class="WpfApplicationLaufschrift1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="400">

<Canvas Width="100" Height="100"  Background="Cyan">
   <TextBlock Canvas.Top="0" Canvas.Left="0" Name="myTextBlock"
        FontSize="14pt">
        <TextBlock.Triggers>
           <EventTrigger RoutedEvent="TextBlock.Loaded">
      <BeginStoryboard>
         <Storyboard>
                    <DoubleAnimation RepeatBehavior="Forever" AutoReverse="true"
              Storyboard.TargetName="MyTranslateTransform" 
              Storyboard.TargetProperty="X"          
              From="200" To="-200" Duration="0:0:7" />
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </TextBlock.Triggers>
        <TextBlock.RenderTransform>
          <TranslateTransform x:Name="MyTranslateTransform" X="0" Y="0" />
        </TextBlock.RenderTransform>
        Dies ist ein langer Text (Lauftext)
      </TextBlock>
    </Canvas>
</Window>

Verbesserungsvorschläge gerne gesehen

Danke
Wolfram

06.11.2008 - 18:13 Uhr

Hallo codeRocker

Frage: Wie kann ich herausfinden für welches Programm ich was anstadt ieframe einsetzten muss?

Beispielsweise mit "Microsoft Spy++" und dort "Window Search". Ist beim Developer Studio 2005 wohl zumindest dabei, gibt aber sicher auch andere Tools dementsprechend.

Da siehst du beispielsweise den Class Namen "IEFrame", wenn du das meinst.

Siehe Dateianhang, gemacht mit "Microsoft Spy++ V8.00.xx"

Gruß
Wolfram

05.11.2008 - 20:18 Uhr

Hallo schaedld,

der Text wird dynamisch während des Programmlaufes geholt und sollte dann "durchlaufen" - wie ein Ticker eben. Expression Blend habe ich aktuell nicht.

Gibt es da wirlich keine "einfache" Lösung mttels WPF / C#?

Danke für eine Antwort.

05.11.2008 - 01:22 Uhr

Hallo,

gibt es unter WPF eine einfache Möglichkeit, einen Lauftext zu erstellen, d.h. ein Text, der wie ein Ticker durchläuft?

Entweder als XAML oder per C# Code.

Bei TextBlock oder Label hätte ich gedacht - aber irgendwie nchts gesehen -
stehe da vielleicht auch etwas auf dem Schlauch, aber habe nichts gefunden 😉

Danke für eine Antwort.

04.11.2008 - 00:32 Uhr

Hallo Vril,

nur kurz - spät des Abends - spontan folgende zwei Tips dazu:

'Verschoben' hängt sicher davon ab, ob du bei der Ausgabe einen Proportionalfont hast oder nicht, d.h. ob die Breite ALLER Zeichen gleich ist oder nicht.

Wenn Proportionalfont gewünscht, die Frage, ob du nicht vielleicht einfach ein kleines Grid / ListView mit zwei Spalten ausgibts? Sieht wahrscheinlich besser aus.

Gruß
Wolfram

23.10.2008 - 21:45 Uhr

Hallo michlG,

erstmal vielen Dank für deine Antwort. Werde baldmöglichst (Montag) diese Links mir auch nochmal näher anschauen. Vielleicht sind ja ein paar Anregungen dabei, wobei es ja keine echte Lösung zu geben scheint.

Ja, das Video wird teilweise nicht in der Originalauflösung abgespielt und die angegebene "Worst Case HW" hat sicher eine schlechte Grafikperformance (Onboard Grafik). Aber ich kanns nun mal nicht ändern, auch darauf sollte das Ding möglichst vernünftig laufen.

Frage(n) auch an alle:

  1. Bringt es was, zu versuchen, den MediaPlayer via OCX oder wie auch immer von C# aus anzusprechen? (Sample 😉 )
  2. Bei den 'Problemkindern' war immer der MediaPlayer 10 installiert. Ist die Chance, dass der 11er dort schneller wäre, da?

Danke nochmals - vielleicht hat ja noch jemand 'ne Idee oder einen Tip?
Wäre sehr dankbar dafür.

22.10.2008 - 21:45 Uhr

Hallo,

habe ein Performance Problem mit WPF und dem MediaElement auf "schwachen" Rechnern (die gibt es halt noch draußen)


this.mediaElement1.Source = new Uri("bear.wmv");
mediaElement1.Play();

Auf einem älteren Notebook (Athlon XP-M 2400+, 1.8GHz, Onboard-Grafik) wird beim Abspielen im FullScreen in der WPF Applikation 100% CPU gebraucht und ruckelt. Spielt man es im (standalone) Windows Media Player 10 ab, braucht es "nur" ca. 60%.
Bei aktuelleren Notebooks mit "besserer" Grafik kein Problem (ca. 10% in beiden Fällen). Bei einem noch schwächeren Rechner (Mini-ITX-Rechner, z.B. AMD LX800, Via Epia CPU) ist das Verhältnis sogar 40% ohne Ruckeln (standalone) zu 100% CPU bei WPF mit Ruckeln.

Jeweils XP SP2, Framwrok 3.5 SP1.

Hat da jemand eine Idee zur Performancesteigerung unter WPF oder Tips???
Irgendwie schafft es der Standalone ja auch, daß es nicht ruckelt. Und ich dachte, daß mit dem MediaElement eigentlich auch nur dann der eigentliche MediaPlayer die Arbeit tut.