Laden...
nitronic
myCSharp.de - Member
13
Themen
354
Beiträge
Letzte Aktivität
vor 13 Jahren
Dabei seit
14.03.2004
Beruf
Software Architect / Program Manager
Herkunft
Österreich
Website
Blog
Erstellt vor 16 Jahren

Die Blauäugigkeit habe ich beim letzten Mal noch überlesen. Ich bin also gleich mehrfach blauäugig weil ich das Recht nicht 100%ig auswendig kenne und Vermutungen anstelle. Zudem war dein Beispiel mit den Bildern im letzten Post unpassend (solche Copyright-Verstöße sollten nummermehr jedem bekannt sein). Und das mit dem URL-Grabber ist eher der Apfel-Birnenvergleich (ganzer Seitenklau, keine Hinweise).

Gut, wenn Copyright-Verstöße bezgl. Grafiken bekannt sind: Was unterscheidet dies von Dokumenten? 😉

@Url-Grabber: Nein, ist kein Apfel-Birnenvergleich: Gegrabbed wird inklusive Copyright-Vermerke. D.h. Name, Impressum, alles vorhanden. Der Name des Urhebers wird also ausgewiesen. Nur ists eben nicht sein Webspace.

Bist du dir da sicher? Eine der ehemalig größten deutschen Internetseiten musste Anfang dieses Jahrtausend trotz eines Relaunches schließen (der Name ist mir aber momentan entfallen). Auch sicher keine Unbekannte war das k-Hardware-Netzwerk, welches trotz vielen Besuchern schließen musste. Das Web ist immer noch schnelllebig. Da sind kleinere Seiten i.d.R. sicherer. Zwar zugegebenermaßen nicht auf den neuesten Stand, aber man kann davon ausgehen, dass der Inhalt noch einige Zeit geben wird. Beispiele, welche Seiten bis ins Jahr 199x reichen, kann ich dir gerne geben. Kleine Seiten (wie die meinige) stellen zu den großen Anlaufpunkten des Webs eine Ergänzung dar. Ich finde auch an dieser Stelle trifft dein Tonfall einen leicht überheblichen Beigeschmack. Eine kleine Rücksalve Bläuaugigkeit.

Es gibt unterschiedlichste Gründe, warum Websites schließen. Diese können privater, rechtlicher und/oder wirtschaftlicher Natur sein. Dass damit Content verschwindet ist klar.

Auf der anderen Seite wird eben Content bewußt aus dem Internet genommen. Wie auch schon gesagt wurde: Weil veraltet, weil nicht besonders gut und keine Zeit zur Überarbeitung usw. Damit musst du nun einmal leben.

@Überheblichkeit: Es ist immer eine Sache, wie etwas gesagt wird und wie es ankommt. Nicht immer ist der Sender schuld, nicht immer der Empfänger. Wenn du manches als Überheblichkeit einstufst ist das dein gutes Recht. Meines ist zu sagen, dass mir das egal ist 🙂

Ich gehe mal davon aus, dass du ein Backup nicht gestattest.

Korrekt.

Erstellt vor 16 Jahren

Wiegesagt, konnte ich die Quelle nach solanger Zeit nicht mehr auffinden. Dazu unten mehr. Den Inhalt habe ich natürlich in keinster Weise verändert, wenn auch die Form darunter geleidet hat.

Das ändert an der Sachlage nichts.

Der augenscheinliche Gedanke war nur, das niemand zu Schaden käme und alle profitieren: Der private Homepagebesitzer kann Material zur Verfügung stellen; der Urheber wird über seine Grenzen bekannt; die Nutzer finden die Infos an verschiedenen Infos.
Ich meine, warum sollte der Urheber sonst seine Werke frei ins Internet stellen (meist hat keine Homepage)? Da ist eine Vervielfältigung doch erwünscht. Aber du hast die Antworten ja oben schon gegeben.

Eine Vervielfältigung ist dann erwünscht, wenn dies ausdrücklich erwähnt wird. Ausserdem stellt jemand seinen Content ins Internet, damit dieser verlinkt und nicht an anderer Stelle erneut angeboten wird. Schließlich möchte ich als Urheber mehr Traffic generieren. Möchte ich es beispielsweise nicht auf meiner eigenen Website publizieren, sondern an anderer Stelle, dann suche ich mir etwas mit großer Reputation. Siehe codeproject.com o.ä.

Was das Thema "über die Grenzen hinweg bekannt werden" angeht: Wo sei gesagt, dass dies mit deiner Website so ist? Weder kennt man Klickraten, noch sonstige weiterführende Informationen. Dein Gedanke selbst mag gut gemeint sein, entspricht aber weder der rechtlichen Grundlage, noch dem Willen der meisten Urheber.

Ich habe mal eben spontan "norbert eder gdi" eingegeben... du hast Recht. Das scheine ich übersehen zu haben?! Ich kann dir aber versichern, dass das nicht absichtlich passiert ist. Das überrascht mich insofern selbst.

Ich unterstelle dir keine Absichtlichkeit, sondern Blauäugigkeit.

Da gab es das Problem, dass z.T. die Quellen nicht mehr existierten und da wollte ich mir etwas Arbeit ersparen mit mühseligen, oft vergeblicher Mikrosuchen. Zu zweiten Punkt ist noch zu beachten, wielange man auf eine Antwort warten darf? Manchmal bekomme ich überhaupt keine Antwort (über 2 Wochen), ob es dann verpönt ist, das Material online zu stellen? Das wäre wirklich schade!

Wenn du keine Antwort erhältst, dann ist das gleichzusetzen mit einer Absage. Dies bedeutet für dich, dass du diesen Content nicht verwenden darfst.

Letztendlich habe ich drüber nachgedacht, und meine mich erinnern zu können, deine GDI-Tipps aus einem Forumthread in die Txt-Datei kopiert zu haben.
Es gibt wohl ein entscheidendes Motiv, was mich dazu veranlasst, Daten nochmal selbst anzubieten:

Wie gesagt, ich habe meinen Artikel in einer der vorherigen Posts verlinkt. Da siehst
du ganz genau woher du ihn hast.

Die Angst, die Quellen könnten verschwinden aus dem schnelllebigen www (ganz besonders Foren). Die Erfahrung spricht leider dafür. Als Beispiel sei
>
genannt; die Site verlottert seit Jahren und vieles aufwändig ausgearbeitetes Content ist unwiderruflich im Nirwana verschwunden.

Das gibt dir aber trotzdem nicht das Recht, ungefragt urheberrechtlich geschütztes Material zu verbreiten.

Summa summarum - Du hast mich überzeugt. Ich werde künftig eine Protokollierung meiner Anfragen anfertigen. Ich weiß noch nicht wie ich auf unbeantwortete Antworten reagiere, aber das werde ich auch noch herausbekommen. Zwar steigt nun der Aufwand enorm an (20% an Zeit die ich auch an Qualitätsverbesserung verwenden hätte können), aber es ist unvermeidlich, wie du aufgezeigt hast. Zumindest Guter Willen oder Symbiose-Gedanken hin oder her, das zählt eben nicht. Man kann froh sein, dass Verlinkungen nicht angefragt werden müssen.

Noch einmal: wird auf eine Anfrage von dir nicht geantwortet, darfst du es nicht verwenden. Ausserdem kann ich mir nicht vorstellen, dass es dir jemand erlaubt, eine Kopie auf deinem Rechner abzulegen.

@Guter Wille etc.: Ganz ehrlich: Willst du, dass von dir verfasste Inhalte irgendwo auftauchen und du weißt es noch nicht mal? Kann ich mir nicht vorstellen.

Letzenendlich würde ich dich bitten, eine Backupkopie deines Inhalts auf meinen Server bzw. Computer anzufertigen zu dürfen, um in Falle eines Falles nicht auf den externen Link angewiesen zu sein (welcher i.d.R. als einzige Quelle fungiert).

Der Artikel steht auf einer Plattform mit über 200.000 Benutzern (tutorials.de) und ich sehe keinen Sinn dahinter ein "Backup" für eine Seite mit 10 Visits pro Tag anzufertigen. Sorry. Du kannst gerne verlinken, das steht dir frei.

Erstellt vor 16 Jahren

Mein GDI+ Artikel wurde ursprünglich als PDF auf meiner Website angeboten und später auf tutorials.de publiziert. Auf meiner Website ist es nicht mehr vorhanden, das ist korrekt so.

Aber:
a) Dieser Artikel wurde von mir unter oben genannten Link der Öffentlichkeit zur Verfügung gestellt. Dies bedeutet, dass ihn jeder lesen und die Beispiele darin ausprobieren kann. Es heißt jedoch nicht, dass dieser Content verwendet wird, um ein 10-Sekunden PDF daraus zu erstellen und auf der eigenen Webseite zu hosten.

b) Ja, du hast natürlich meinen Namen angemerkt. Gut. Aber hast du mich auch gefragt, ob ich diesen Artikel überhaupt auf deiner Site sehen möchte? Nein, hast du nicht. Und genau da liegt das Problem.

Du selbst schreibst in deinem Impressum:

Alle unter wubb.de veröffentlichten Texte und Bilder unterliegen dem Urheberrecht von (Name entfernt) und dürfen nur mit ausdrücklicher Erlaubnis mit Quellenangabe kopiert, weitergeleitet oder vervielfältig werden. Bei elektronischer oder schriftlicher Veröffentlichung ersuche ich um eine kurze Benachrichtigung per E-Mail und um ein Belegexemplar.

Du willst also, dass man dich um ausdrückliche Erlaubnis fragt, ebenso, dass die Quelle angegeben wird (eine Quellenangabe im Internet enthält auch immer die Angabe der URL unter welcher der Inhalt gefunden wurde) und du bittest um eine kurze Benachrichtigung als auch ein Belegexemplar.

Wieso tust du nicht das, was du von anderen erwartest? Und wieso willst du das Belegexemplar? Ganz klar. Du willst ja schließlich nicht, dass es absolut billig aussieht und somit eventuell dein Name an Reputation verliert. Genau das sehe ich auch so.

Ich bin in der Community tätig, weil ich gerne Menschen helfe. Daher stelle ich auch Inhalte zur Verfügung. Ich bekomme jedoch einen Hals², wenn einfachste Grundlagen nicht eingehalten werden. Und das ist hier auch der Punkt.

Du konntest den von mir angebotenen Inhalt im Internet nicht mehr finden? Und das obwohl du gesucht hast? Nein. Bei Google stehts an erster Stelle wenn nach dem Titel gesucht wird. Auch auf CodeZone ist eine Verlinkung zu finden (auf Google übrigens an 3. Stelle).

Bis auf eine Ausnahme habe ich die Quellen namentlich immer erwähnt. Bei einigen steht noch eine Anfrage aus.

Wie schon erwähnt: Namentliche Quelle reicht nicht. Eine Quellenangabe umfasst auch den Link zu einer vertrauenswürdigen Fundstelle bzw. zum Content-Ersteller. Anfragen müssen VOR der Veröffentlichung eingeholt werden.

Ich setze mich für ein weltoffenes Internet mit Hyperlinks ein. Das heißt natürlich nicht, dass man damit sämtliche Coprights missachtet.

Ich hätte mich dazu gar nicht geäußert, wenn du einfach auf den verfügbaren Content verlinkt hättest - wie du es ja auch propagierst. Kein Hyperlink und Copyright missachtet.

Ich wehre mich aber gegen die Behauptung, deren Inhalte als zueignen gemacht zu haben.

Ich habe gesagt, dass du meine Inhalte in ein Low-Budget-PDF kopiert hast. Und das ist nicht rechtens.

Ich persönlich würde mich freuen, wenn mein frei angebotenes Material, wo ich keine Verteilungsbeschränkungen vermerkt habe natürlich (unverändert) weitergegeben wird.

Blauäugigkeit. Bei Images, die via Bildersuche im Internet auftauchen, ist auch keine Beschränkung vermerkt und dennoch dürfen sie nicht ohne Rücksprache verwendet werden.

Url-Grabber verändern auch nichts und stellen den Content as-it-is unter irgendeiner URL ins Internet. Ist ja auch nicht legitim, hm?

Wenn meine Site kommerziell und voller Werbung wäre, hätte ich das alles mit Sicherheit nicht reingestellt. Sie ist und bleibt aber privat und werbefrei (mit gemeinnützigem Hintergedanke). Ob das was an der Sachlage ändert?

Nein. Tut es nicht.

Erstellt vor 16 Jahren

Deine Seite mag für den einen oder anderen Durchaus sinnvoll sein (obliegt jedem selbst zu entscheiden), aber bei dieser Aussage wird es mir schon mal eben schlecht:

Alle hier angebotene Ressourcen sind frei und legal im www erhältlich!

Nur weil etwas frei im Internet verfügbar ist, heißt es noch lange nicht, dass es ohne Erlaubnis für eigene Zwecke verwendet werden darf.

Noch dazu, wenn die Quelle nicht verlinkt wurde, das resultierende PDF ein zusammenkopierter Artikel von mir ist, noch dazu absolut schlecht formatiert usw.

Aus deiner Sicht wäre es also sehr zielführend, dich mit mir in Kontakt zu setzen.

Erstellt vor 16 Jahren

Das was du willst ist wohl das, was wir von ASP.NET als MasterPages kennen. Dieses Konzept wird eigenständig in WPF nicht unterstützt, aber es gibt dazu einen netten Artikel, der dir weiterhelfen sollte:

WPF "Master Page" like functionality

Erstellt vor 16 Jahren

Ok, also kann ich mir das folgendermassen vorstellen. Mein ListViewItem hat ein Child, welches mein Item aus dem Source entspricht. In meinem ControlTemplate bin ich auf der Ebene des Childs und kann deshalb mit Binding auf die Eigenschaften von meinem Typ zugreifen. Um nun wieder zu meinem Parent (dem ListViewItem) zu gelangen, muss ich TemplateBinding nutzen?

Nein, wenn du die ItemsSource-Eigenschaft zugewiesen hast, dann gibt es das ListViewItem so gesehen nicht mehr. Das würde es nur geben, wenn du folgendes hast:


<ListView>
  <ListViewItem>FirstItem</ListViewItem>
  <ListViewItem>SecondItem</ListViewItem>
</ListView>

In diesem Fall sähe der Logical Tree so aus:


ListView
 |- ListViewItem
     |- String
 |- ListViewItem
     |- String

Einfach mal mit dem LogicalTreeHelper bzw. dem VisualTreeHelper spielen 🙂

Schade, dass soetwas nur so umständlich ist. Eine Möglichkeit wie Key="Mein Statischer Wert {Binding ...}" wäre viel praktischer 🙂

Vielleicht geht es auch viel einfacher 🙂

Erstellt vor 16 Jahren

In deiner Variante würde das Admin-Menü ja immer erscheinen ...

Ausserdem sind ValidationRules nicht unbedingt dafür gemacht. Das würde ich anders lösen.

Wenn es sich nicht weiterhin stört, dass das Admin-Menü immer sichtbar ist, kannst du den XPath bei deinem Binding auf

XPath="/tools/tool[@type='admin']"

stellen. Dann erscheinen auch nur alle Einträge für Admin. Ob das Menü dann sichtbar ist oder nicht, solltest du anders lösen.

Erstellt vor 16 Jahren

Das heisst also, ich kann sowohl "{Binding Path=EigenschaftMeinesTyp}" und "{Binding Path=EigenschaftListView}" nutzen?

Für den zweiten Fall gibt es das TemplateBinding. Mit Binding alleine kannst du entweder Eigenschaften des übergebenen Typs binden oder unter Angabe von ElementName Eigenschaften eines anderen Elemente.s

Du hast geschrieben "Dieser Typ IST ein ListViewItem". Das ControlTemplate bezieht sich doch genau auf ein Item und das kann doch nur von einem Typ sein. Ich verstehe die Logik irgendwie nicht. Befinde ich mich in einem ListViewItem oder in einem Item von meinem Typ? Ich stelle mir das so vor, dass ich mich in dem Design Bereich einer foreach Schleife befinde. Ich hoffe du verstehst was ich meine.

Ok, ich versuchs nochmal.
Ein ListView besitzt Items. Diese Items sind ursprünglich vom Typ ListViewItem. Dahingehend kann man dann beispielsweise ein ControlTemplate erstellen. Dieses wird auch auf die ListViewItems entsprechend angewandt. Wenn du nun die ItemsSource setzt, dann befindet sich in der Items-Auflistung eine Collection deiner Objekte.

Ok danke, aber in dem Fall kann ich nun nur an den Pfad binden. Ich möchte aber sozusagen den Sourcestring aus 2 Bindungen zusammensetzen. D.h. sowas wie Pfad (Bindung1) + Dateiname (Bindung2).

Erstelle dir eine Methode/Eigenschaft, welche dir den Gesamtpfad zurückgibt und diesen bindest du dann einfach.

Eine Kleinigkeit ist mir auch noch unklar. Wenn ich mich in dem ControlTemplate befinde, habe ich nur einen Bezug auf ein ListViewItem. Dieses ControlTemplate nutze ich in einem UserControl. Was ist aber wenn ich aus dem ControlTemplate auf Eigenschaften des UserControls zugreifen möchte. Ich habe da folgendes Problem. Mein UserControl hat eine Eigenschaft DefaultImageSource. Wenn kein ImagePath in meinen Items vorhanden ist, soll dieser DefaultImageSource genutzt werden. Meine Idee in der Sache wäre ein Trigger, der ja (wahrscheinlich) auf die Eigenschaften des Items zugreifen kann. Aber wie sag ich dem Trigger dann, dass er den ImageSource Pfad in dem Fall auf DefaultImageSource setzen soll?

Dein UserControl ist ja auch nur ein Element. Probiere es mit einem Binding unter Angabe des ElementName und verweise auf deine entsprechende Property. Achte darauf, dass es sich um eine DependencyProperty handelt. Das sollte funktionieren, ohne es jetzt getestet zu haben.

Erstellt vor 16 Jahren

Gar nicht. Denn die Zelle als solches gibt es ja nicht. Du definierst mit deinem Grid ja nur einen Raster. Nun musst du aber auch definieren, was wo genau dargestellt wird. D.h. du definierst, dass beispielsweise in Spalte 0 und Zeile 1 ein TextBlock anzuzeigen ist. An diesen kannst du auch etwas binden.

Das sollte bei deinen Überlegungen weiterhelfen.

Erstellt vor 16 Jahren

So, wie versprochen, hier ein kleines Beispiel. Es handelt sich dabei um ein Window und dieses besitzt mehr oder weniger nur eine ListView. Diese ListView bekommt über die ItemsSource eine Collection mit Elementen vom Typ Person, welcher wie folgt aussieht:


public class Person
{
    public String Firstname { get; set; }
    public String Lastname { get; set; }
    public String PicturePath { get; set; }
}

Nun wurde von mir das ControlTemplate ausgetauscht. Was macht dieses?

  1. Es stellt das jeweilige Element in einem Grid dar (ListViewItem). Die linke Spalte ist befüllt mit einem Image, in der rechten Zeile befinden sich zwei Zeilen. In der ersten wird der Nachname fett angezeigt, darunter der Vorname.

  2. Es ist darauf zu achten, dass den einzelnen Elementen im ControlTemplate ein Name zugewiesen wird. Dadurch kann über die Trigger darauf zugegriffen werden.

Hier nun das gesamte XAML-Markup:


<Window x:Class="DotNetGui.WpfListViewDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title=".NET GUI - ListView - Resize Image Demo" Height="300" Width="300">

    <Window.Resources>

        <Style x:Key="{x:Type ListViewItem}" TargetType="{x:Type ListViewItem}">
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="Template">
                <Setter.Value>

                    <ControlTemplate x:Key="{x:Type ListViewItem}" TargetType="{x:Type ListViewItem}">
                        <Border Padding="2" SnapsToDevicePixels="true" Background="{TemplateBinding Background}">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="50"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="25"/>
                                    <RowDefinition Height="25"/>
                                </Grid.RowDefinitions>

                                <Image Name="PersonPicture" Source="{Binding Path=PicturePath}" Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" Width="30"/>
                                <TextBlock Padding="2" Text="{Binding Path=Lastname}" FontWeight="Bold" Grid.Column="1" Grid.Row="0"/>
                                <TextBlock Padding="2" Text="{Binding Path=Firstname}" Grid.Column="1" Grid.Row="1"/>
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" Value="LightBlue"/>
                                <Setter TargetName="PersonPicture" Property="Width" Value="50"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="False">
                                <Setter Property="Background" Value="White"/>
                                <Setter TargetName="PersonPicture" Property="Width" Value="30"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

    <DockPanel>
        <ScrollViewer CanContentScroll="True" VerticalScrollBarVisibility="Auto">
            <ListView x:Name="PersonListView"/>
        </ScrollViewer>
    </DockPanel>
</Window>

Beachte bitte die Zeilen:

<Setter TargetName="PersonPicture" Property="Width" Value="50"/>

bzw.

<Setter TargetName="PersonPicture" Property="Width" Value="30"/>

Darüber kann direkt das Image-Element des ControlTemplates beeinflusst werden. Auf diese Weise kannst du sehr einfach (ohne sonstige Handgriffe zu tun), die Breite deines Images anpassen.

Ich hoffe das hilft dir soweit mal weiter bzw. zeigt dir auf, wie man Derartiges angehen kann. Hier noch der Screenshot meiner Beispielanwendung: