Laden...

Forenbeiträge von Dominicano Ingesamt 23 Beiträge

21.08.2021 - 23:59 Uhr

Hi Th69

Ja, LampenLabel[0] war falsch.
Also :


private bool UpdateLabel1()
        {
            if (j < 32 && LampenLabel[j].BackgroundColor == Color.Red && Lampen[j])
                Device.BeginInvokeOnMainThread(async () =>
                {
                    LampenLabel[j].BackgroundColor = Color.Green;
                    //System.Diagnostics.Debug.WriteLine("Label geändert zu grün: " + j);
                    j++;
                });

            else if (j < 32 && LampenLabel[j].BackgroundColor == Color.Green & !Lampen[j])
                Device.BeginInvokeOnMainThread(async () =>
                {
                    LampenLabel[j].BackgroundColor = Color.Red;
                    //System.Diagnostics.Debug.WriteLine("Label geändert zu rot: " + j);
                    j++;
                });
            else
                j++;
            if (j > 31)
            {
                j = 0;
                return false;
            }
            else
                return true;
        }

funktioniert auf Android-Geräten, Windows 8.1 , 10 und Phone reibungslos. IOS kann ich mangels IPhone oder Mac nicht testen. Nur bei Windows IoT auf dem RasPi halt nicht. (Liegt es an Windows? Selbst bei der Serververbindung bekomme ich teilweise SoketExceptions wo nie welche kamen...)

"j" mußte außerhalb deklariert werden da eine for-Schleife nur Exceptions brachte


private bool UpdateLabel4() // funktioniert nicht!
        {
            Device.BeginInvokeOnMainThread(async () => {
            for (int i = 1; i < 32; i++)
                if (LampenLabel[i].BackgroundColor == Color.Red && Lampen[i])
                    LampenLabel[i].BackgroundColor = Color.Green;
                else if (LampenLabel[i].BackgroundColor == Color.Green & !Lampen[i])
                    LampenLabel[i].BackgroundColor = Color.Red; 
            });
            return false;
        }

Binding der BackgroundProperty habe ich heute auch versucht. Laut Debug werden die Farben geändert , nur in der Gui nicht.

Habe evtl. einen leichteren Weg gefunden: (eine schon früher geschriebene) Win-Forms.exe läßt sich auch (mit zwei zusätzlichen Programmen) so auf dem PI ausführen.
Evtl. braucht es ja mal jemand:https://tutorials-raspberrypi.de/raspberry-pi-gui-apps-c-sharp-dot-net/

20.08.2021 - 17:52 Uhr

Hallo Abt

Ich habe da ein Server-Client-Projekte zur Steuerung von Licht und verschiedenen elektronischen Geräten - auch als Smarthome bekannt.
Es läuft auf Win 10 und Android absolut fehlerfrei, nur beim Raspberry Pi 3 mit WinIoT bekomme ich Ausnahmen gemeldet. Ich bin mir nicht sicher wo genau der Fehler ist, da es teilweise funktioniert.
Bsw. das bringt keine Ausnahme:


if (house_Start.ServerStatus)
                    Device.StartTimer(TimeSpan.FromSeconds(1), () => OnTimerTick());


private bool OnTimerTick()
        {
            Device.BeginInvokeOnMainThread(async () =>
            {
                if (house_Start.ServerStatus)
                    serverLabel.Text = "Server ist offline";
                else if (!house_Start.ClientStatus)
                    serverLabel.Text = "Client nicht gestartet";
                else
                    serverLabel.Text = "Server ist online";
            });
            return true;
        }

nur hier scheint es bei der zusammenführung der verschiedenen Tasks zu geben:


private void UpdateLampen()
        {
            Device.StartTimer(TimeSpan.FromMilliseconds(10), () => UpdateLabel());
        }


private bool UpdateLabel()
        {
            if (j < 32 && LampenLabel[j].BackgroundColor == Color.Red && Lampen[j])
                DispatcherHelper.CheckBeginInvokeOnUI(()=>
                //Dispatcher.BeginInvokeOnMainThread(() =>
                {
                    LampenLabel[0].BackgroundColor = Color.Green;
                    j++;
                });
            else if (j < 32 && LampenLabel[j].BackgroundColor == Color.Green & !Lampen[j])

                DispatcherHelper.CheckBeginInvokeOnUI(() =>
                //Dispatcher.BeginInvokeOnMainThread(() =>
                {
                    LampenLabel[j].BackgroundColor = Color.Red;
                    j++;
                });
            else
                j++;
            if (j > 31)
            {
                j = 0;
                return false;
            }
            else
                return true;
        }

Die Meldung von VisualStudio19 lautet:


The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

Die Frage ist nun: wird dein TaskFactory Abhilfe schaffen? Ich habe schon mehrere "mögliche Lösungen" getestet (wie man noch im Code sieht), keine hat geholfen.

Danke schonmal im Voraus, Domi

20.06.2020 - 22:26 Uhr

Hallo

Hat hier schon jemand Erfahrungen mit Urho (Urho3D) gemacht ? (Suche ergab Null (0) Ergebnisse)

Ok, wenn jemand auf der Suche ist nach Lösungen um im Androidbereich (3D)Grafiken zu teilen: hier seid ihr richtig!
Es ist sehr schwer sich durch dir Docu zu lesen, Hinweise sind selten und es gibt kaum Beispiele.
Aufgrund fehlender Alternativen - mit Xamarin allein kann man nicht einmal eine Linie zeichnen - habe ich mich mit Urho vertraut gemacht und bis auf auf wenige Details bin ich sehr zufrieden. Ich habe auch SKPaint getestet, damit bekommt man wenigstens Bilder in die App 😉, aber richtig Zeichnen geht auch nicht zufriedenstellend. Uhro dagegen bietet all das an, nach 2 Monaten habe ich mich 'eingearbeitet' und alles funktioniert super!
Seit 2 Tagen arbeite ich auch mit den sogenannten "RigidBodys"; Fertige menschliche Modelle, die man z.B. für Egoshooterspiele nutzen kann. Bewegungen der 'Puppen' wirkt sehr realitätstreu, aber sie sind halt nur Vorlagen und brauchen dringend Kleidung 😁 .
Hilfe könnte ich bei den Texturen (Spiegelungen um genau zu sein) brauchen, das ist etwas schwerer zu verstehen.

Gruß Domi

30.01.2020 - 18:43 Uhr

Danke Th69

Jetzt habe ich´s begriffen. Ist nicht so leicht, wie in einigen Tutorials geschrieben wird, aber auch nicht zu kompliziert. Deine Links haben mir sehr weitergeholfen.

Gruß Domi

28.01.2020 - 21:58 Uhr

Hallo
Habe ein paar Jahre nicht programmiert und finde mich jetzt in einer neuen Welt wieder. Ich wollte eigentlich nur etwas in 3D probieren, was scheinbar nicht mehr so einfach ist wie vor Jahren.

Kurz gesagt: wie funktioniert das mit dem Binding zwischen XAML und Code???

Ich habe es so verstanden:

 <AxisAngleRotation3D x:Name = "rotate"   Axis = "{Binding Path=vector3}"/>

im XAML und

private Vector3D vector3 = new Vector3D(1,2,1);

im Code, oder liege ich da völlig falsch? Wenn nicht, wieso dreht sich das Objekt nicht wie gewünscht?

MfG Domi

28.04.2018 - 21:07 Uhr

Ok, ich habe den Fehler gefunden:
Button.Location und Region haben NICHT die selben Koordinaten!
Button.Location geht vom untergeordnetem Control (Panel oder Form) aus, auf dem der Button angeordnet ist. Region geht vom Button aus! Also muss die Region bei 0,0 starten und nicht bei Bsw. 750, sonst ist sie ausßerhalb des Fensters.

26.04.2018 - 19:49 Uhr

Hallo

Ich versuche auch gerade einen trapetzförmigen Button zu erstellen, aber es klappt nicht so, wie es hier und in anderen Foren erklärt wird.

            case 2:
                    button.Location = new Point((int)ScaleFrontPoint(myHouseObjects.p501).X + 1, (int)ScaleFrontPoint(myHouseObjects.p501).Y + 1);
                    button.Size = new Size(new Point((int)(ScaleFrontPoint(myHouseObjects.p506).X - ScaleFrontPoint(myHouseObjects.p505).X - 1), (int)(ScaleFrontPoint(myHouseObjects.p505).Y - ScaleFrontPoint(myHouseObjects.p501).Y - 1)));
                    button.Text = "Obergeschoss";
                    button.Name = "Obergeschoss";
                    //MessageBox.Show(button.Region.ToString());
                    return button;
                case 3:
                    button.Location = new Point((int)ScaleFrontPoint(myHouseObjects.p509).X + 1, (int)ScaleFrontPoint(myHouseObjects.p512).Y + 1);
                    button.Size = new Size(new Point((int)(ScaleFrontPoint(myHouseObjects.p510).X - ScaleFrontPoint(myHouseObjects.p509).X-1), (int)(ScaleFrontPoint(myHouseObjects.p509).Y - ScaleFrontPoint(myHouseObjects.p512).Y-1)));
                    PointF[] points = { ScaleFrontPoint(myHouseObjects.p509), ScaleFrontPoint(myHouseObjects.p510), ScaleFrontPoint(myHouseObjects.p511), ScaleFrontPoint(myHouseObjects.p512) };
                    GraphicsPath gPath = new GraphicsPath(FillMode.Alternate);
//                    gPath.AddRectangle(new Rectangle(button.Location,button.Size));
                    gPath.AddPolygon(points);
                    button.Region = new Region(gPath);
                    button.Text = "Dach";
                    button.Name = "Dach";
                    return button;

"case 2:"benötigt keine Region, aber ob Rechteck oder Polygon, die Region in "case 3:" wird nicht angenommen, wenn ich die Region ausklammere wird an der richtigen Position ein rechteckiger Button angezeigt.
Hat jemand eine Idee, woran es liegt?

14.04.2018 - 09:41 Uhr

Konnte das Problem jetzt lösen, indem ich den BackgroundWorker erfolgreich einsetzte.
Jetzt habe ich allerdings eine Kuriosität: Bei der Ausführung auf meinem Smartphone wird manchmal eine Ausnahme (NullReferenceException) ausgegeben, manchmal nicht......Habe eine Testschleife eingerichtet mit 100 Durchläufen und 100ms sleep , dabei kommt die Exception zu verschiedenen Zeiten : mal beim 10ten Durchlauf, mal beim 89ten, und manchmal garnicht....
Sleep habe ich auch schon geändert auf bis zu 5000...keine Änderung.
Hat jemand dazu eine Idee?

10.04.2018 - 19:23 Uhr

Die Klasse ist vorhanden:

 public class TCPClient
    {
        public static String SERVER_IP = "192.168.2.107";
        public static int SERVER_PORT = 8000;
        private String mServerMessage;
        public IOnMessageReceived<String> mMessageListener = null;
        private bool mRun = false;
        private BinaryWriter mBufferOut;
        private BinaryReader mBufferIn;

        public TCPClient(IOnMessageReceived<String> listener)
        {
            mMessageListener = listener;
        }
        public void SendMessage(String message)
        {
            if (mBufferOut != null)
            {
                mBufferOut.Write(message);
                mBufferOut.Flush();
            }
        }
        public void StopClient()
        {
            SendMessage(ClientMessages.Disconnect);
            mRun = false;
            if (mBufferOut != null)
            {
                mBufferOut.Flush();
                mBufferOut.Close();
            }
            mMessageListener = null;
            mBufferIn = null;
            mBufferOut = null;
            mServerMessage = null;
        }
        public void Run()
        {
            mRun = true;
            try
            {
                IPAddress serverAdress = IPAddress.Parse(SERVER_IP);
                Log.Error("TCP Client", "C: Connecting...");
                TcpClient tcpClient = new TcpClient();
                tcpClient.Connect(serverAdress, SERVER_PORT);
                try
                {
                    NetworkStream stream = tcpClient.GetStream();
                    mBufferIn = new BinaryReader(stream);
                    mBufferOut = new BinaryWriter(stream);
                    while (mRun)
                    {
                        mServerMessage = mBufferIn.ReadString();
                        if (mServerMessage != null && mMessageListener != null)
                        {
                            mMessageListener.MessageReceived(mServerMessage);
                        }
                    }
                    Log.Error("RESPONSE FROM SERVER", "S: Received Message: '" + mServerMessage + "'");
                }
                catch (Exception err)
                {
                    Log.Error("TCP", "S: Error", err);
                }
                finally
                {
                    tcpClient.Close();
                }
            } catch (Exception e)
            {
                Log.Error("TCP","C: Error",e);
            }
        }
//        public interface IOnMessageReceived<T> { void MessageReceived(String message); }
    }
    public interface IOnMessageReceived<T> { void MessageReceived(String message); }

Dort treten auch keine Fehler auf.

10.04.2018 - 18:54 Uhr

Hallo zusammen

Nachdem ich viele Jahre (ca.8) nicht mehr im Bereich Programmierung tätig war, möchte ich jetzt wieder anfangen. Es hat sich allerdings viel getan.....
Habe mich in den letzten Wochen in Xamarin vertieft, allerdings auf c#-Basis. Dabei stieß ich auf ein interessantes Beispiel für ein Server-Client-Programm - Server = PC , Client = Android) als Java und versuche nun, es in C# zu schreiben. Bis auf den letzten Punkt , die Implementierung einer Schnittstelle, funktioniert alles. Den ursprünglichen Java-Code findet man hier : https://www.myandroidsolutions.com/2013/03/31/android-tcp-connection-enhanced/
Das Problem liegt in der "MainActivity.cs" des Clienten :

        public class ConnectTask : AsyncTask<String, String, TCPClient>
        {
            protected override TCPClient RunInBackground(String[] message)
            {
                mTcpClient = new TCPClient(IOnMessageReceived<String>
                    {
                        override MessageReceived(String message)
                        {
                            PublishProgress(message);
                        }
                    });
                return null;
            }
            protected override void OnProgressUpdate(String[] values)
            {
                base.OnProgressUpdate(values);
                arrayList.Add(values[0]);
                mAdapter.NotifyDataSetChanged();
            }
        }

Ich habe es ohne Generics versucht und auch mit... es kommt immer die Fehlermeldung : > Fehlermeldung:

CS0119 "IOnMessageReceived<string>" ist "Typ" und im angegebenen Kontext nicht gültig. TCPClientTest C:\Users\Domin icano\source\repos\TCPClientTest\TCPClientTest\MainActivity.cs

Hat jemand eine Idee woran es liegt?

Ich arbeite mit VS2017.
Gruß Domi

07.11.2009 - 10:56 Uhr

hi Xynratron

Fiddler hat mir wirklich geholfen. Konnte dadurch den gesendeten Header nachvollziehen. Es lag am Ende nur an der Reihenfolge der einzelnen Daten darin.
Nachdem ich alles umstellte funktionierte es wunderbar.

Zum Thema Bot : Es ist keiner sondern NUR eine Erleichterung für meine Maus und die Finger. Man kann in dem Spiel Tränke aus verschiedenen Rohstoffen herstellen . Dazu muß man alle 15 Sekunden auf einen bestimmten Button drücken. Das nervt natürlich, wenn man das ca 10 Stunden machen will .

Danke für die Tips, wer die Lösung sehen will kann mich ja anschreiben.

MfG Dom.

04.11.2009 - 21:52 Uhr

Diese Feststellung ist richtig, trotzdem sollte es funktioniern. 😁

04.11.2009 - 21:20 Uhr

hi Markus

Diese Frage kann ich nicht beantworten.

Nach normalem Login werde ich zu www.warofdragons.de/main.php weitergeleitet.
Der WebRequest leitet mich aber zu www.warofdragons.de/index.php um, was der Startseite entspricht. Der ResponseStream enthält nur :"<script> top.location.href="index.php"; </script>" .
Ausgabe bei Firebug : Failed to load source for : http://www.warofdragons.de/login.php

Trotzdem werde ich da zur .../main.php weitergeleitet

04.11.2009 - 19:08 Uhr

Hi Community

Ja, ich weiß daß dieses Thema schon öfters durchgekaut wurde, habe alle Beiträge zu dem Thema durchgelesen und probiert. Trotzdem fand ich keine Lösung.

Folgender Login von "selbstgebauter" Page in ein Onlinespiel funktioniert :

<html>
<head>
<title>Drachenkrieg</title>
</head>
<body>
<table>
<tr>
<td><form name="enter" method="post" action="http://www.warofdragons.de/login.php">
E-Mailadresse</td>
<td>
<input name="email" value="Driver@live.de"></td>
</tr>
<tr>
<td>
Passwort</td>
<td>
<input name="passwd" type="password"/></td>
</tr>
<tr>
<td><input type="submit" value="Login"></td>
</tr>
</table>
</body>
</html>

Passwort : 0123456789 ; wurde extra zum testen angelegt , E-Mail existiert nicht 😉

folgender HttpWebRequest funktioniert nicht :

public Login()
        {
            try
            {
                Uri uri = new Uri("http://warofdragons.de/login.php");
                CookieContainer cc = new CookieContainer();
                ServicePointManager.Expect100Continue = false;
                anfrage = (HttpWebRequest)WebRequest.Create(uri);
                anfrage.Method = "POST";
                anfrage.ContentType = "application/x-www-form-urlencoded";
                anfrage.KeepAlive = true;
                anfrage.CookieContainer = cc;
                anfrage.Referer = uri.ToString();
                string values = "name=enter&email=Driver@live.de&passwd=0123456789";
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] data = encoding.GetBytes(values);
                anfrage.ContentLength = data.Length;
                Stream stOut = anfrage.GetRequestStream();
                stOut.Write(data, 0, data.Length);
                stOut.Flush();
                stOut.Close();

                HttpWebResponse antwort = (HttpWebResponse)anfrage.GetResponse();
                StreamReader streamReader = new StreamReader(antwort.GetResponseStream());
                text = streamReader.ReadToEnd();
            }
            catch (WebException)
            { }
        }

Habe schon alles mir bekannte versucht, ich lande immer auf der Startseite.
Was ich genau weiß, da nur ein Rechner angemeldet sein kann : führe ich das Programm auf einem Rechner aus, logge ich auf auf dem anderen aus dem Spiel aus.

Würde mich über hilfreiche Lösungsvorschläge freuen
MfG Domi

15.10.2008 - 22:14 Uhr

Also ich hab den Fernseher auf dem anderen Monitor laufen und selbst der ist bei manchen Problemen störend. Am liebsten ist mir ABSOLUTE Stille! Alles andere ist nur ablenkend.

09.03.2008 - 09:37 Uhr

Hallo Peter

Das mit dem Handler habe ich schon probiert: es funktioniert , wenn ich "EN/Top.aspx" allein ausfüre. -> Siehe hier.
Bei ausführung der "Default.aspx" , in die "EN/Top.aspx" als Kopf eingebaut ist, kommt keine Reaktion -> Siehe hier.

Trotzdem Danke. Irgendwie kommt der Befehl nicht "durch".

Dom.

08.03.2008 - 20:24 Uhr

Hi Comunity

Hätte da mal eine einfache Frage zu einem etwas komplizierten Problem:

Ich habe folgende Dateien :SiteMaster.master :

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="SiteMaster.master.cs" Inherits="SiteMaster" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Unbenannte Seite</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table width="100%" border="0" cellpadding="1" cellspacing="1">
        <tr>
            <td colspan="3" valign="top">
            <asp:ContentPlaceHolder ID="plhTop" runat="server">
                Der Top-Platzhalter
            </asp:ContentPlaceHolder>
            </td>
        </tr>
        <tr>
            <td style="width: 150px" valign="top">
                <asp:ContentPlaceHolder ID="plhMenu" runat="server">
                    Der Menü-Platzhalter
                </asp:ContentPlaceHolder>
            </td>
            <td valign="top">
                <asp:contentplaceholder id="plhMain" runat="server">
                    Der Haupt-Platzhalter
                </asp:contentplaceholder>
            </td>
            <td style="width: 150px" valign="top">
                <asp:ContentPlaceHolder ID="plhLink" runat="server">
                    Der Link-Platzhalter
                </asp:ContentPlaceHolder>
            </td>
        </tr>
        <tr>
            <td colspan="3" valign="bottom">
                <asp:ContentPlaceHolder ID="plhFooter" runat="server">
                    Der Fußzeilen-Platzhalter
                </asp:ContentPlaceHolder>
            </td>
        </tr>
    </table>
    </div>
    </form>
</body>
</html>

Default.aspx :

<%@ Page Language="C#" MasterPageFile="~/SiteMaster.master" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="Content_Top" ContentPlaceHolderID="plhTop" runat="server"> <% Server.Execute("EN/Top.aspx"); %> </asp:Content>

<asp:Content ID="Content_Menu" ContentPlaceHolderID="plhMenu" runat="server"> <% Server.Execute("EN/Menu.aspx"); %> </asp:Content>

<asp:Content ID="Content_Main" ContentPlaceHolderID="plhMain" runat="server"> <% Server.Execute("EN/Main.aspx"); %> </asp:Content>

<asp:Content ID="Content_Footer" ContentPlaceHolderID="plhFooter" runat="server">&copy;2008 Dominicano, All rights reserved </asp:Content>

EN/Top.aspx :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Top.aspx.cs" Inherits="EN_Top" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Unbenannte Seite</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table style="width: 100%">
            <tr>
                <td align="center">
                    Select Language :</td>
                <td align="center">
                    <asp:ImageButton ID="GermanButton" runat="server" ImageUrl="~/Pics/Deutschland.gif" PostBackUrl="~/DE/Default.aspx"></asp:ImageButton>
                </td>
                <td align="center">
                    <asp:ImageButton ID="EnglishButton" runat="server" ImageUrl="~/Pics/England.gif"></asp:ImageButton>
                </td>
                <td align="center">
                    <asp:ImageButton ID="FrenchButton" runat="server" ImageUrl="~/Pics/Frankreich.gif"></asp:ImageButton>
                </td>
                <td align="center">
                    <asp:ImageButton ID="ItalyButton" runat="server" ImageUrl="~/Pics/Italien.gif"></asp:ImageButton>
                </td>
                <td align="center">
                    <asp:ImageButton ID="SpainButton" runat="server" ImageUrl="~/Pics/Spanien.gif"></asp:ImageButton>
                </td>
            </tr>
        </table>
    
    </div>
    </form>
</body>
</html>

EN/Menu.aspx
EN/Main.aspx
DE/Default.aspx :

<%@ Page Language="C#" MasterPageFile="~/SiteMaster.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="DE_Default" %>

<asp:Content ID="Content_Top" ContentPlaceHolderID="plhTop" runat="server"> <% Server.Execute("Top.aspx"); %> </asp:Content>

<asp:Content ID="Content_Menu" ContentPlaceHolderID="plhMenu" runat="server"> <% Server.Execute("Menu.aspx"); %> </asp:Content>

<asp:Content ID="Content_Main" ContentPlaceHolderID="plhMain" runat="server"> <% Server.Execute("Main.aspx"); %> </asp:Content>

<asp:Content ID="Content_Footer" ContentPlaceHolderID="plhFooter" runat="server">&copy;2008 Dominicano, All rights reserved<asp:SiteMapDataSource ID="SiteMapDataSource2"
        runat="server" />
</asp:Content>

DE/Top.aspx
DE/Menu.aspx
DE/Main.aspx

Wie bekomme ich eine Weiterleitung zu "DE/Default.aspx" hin???

Wenn ich nur "EN/Top.aspx" ausführe, funktioniert es, bei "Default.aspx" bekomme ich immer "Default.aspx" zu sehen.

Danke schon jetzt für Kritik und Lösungsvorschläge , Dom.

PS: Derzeitiger Link zu dieser Seite : ASP-TestPage gültig bis : 2:00 Uhr, 9.3.08

03.11.2007 - 22:31 Uhr

Hi Community

Einfache Frage: Ist es möglich von einem Form auf Cookie-Anfragen zu antworten?

Bin bei der Entwicklung eines Programms, welches sich aus dem WWW von bestimmten Seiten selbständig DVD-Cover & Labes downloaden soll. Dabei stößt das Programm z.B. auf Java-Scripts (verschlüsselt aber schon geknackt) und auf Cookie-Abfragen. Wie kann man also diese Abfragen umgehen bzw. beantworten.

Beispiel-Seite : http://www.cdcovers.cc/list/dvd/a . Wie geschrieben, bis dahin alles ok. Das Programm lies und entschlüsselt die Liste mit den Titeln inklusive der Front, CD1, oder anderen Labels, kommt bis auf die Seite, wo das entsprechende Bild angezeigt werden soll, aber da ist dann 'nichts'. Manuell das gleiche, wenn man auf "Aktualisieren" geht. Im selbigen Form wird erklärt, daß das am Neuaufbau der Seite durch Cookies verhindert wird.

MfG Dom.

03.11.2007 - 22:15 Uhr

Aufgrund des vorangestellten Beitrags jetzt 'meine' Lösung:

  1. Print_Button
private void print_Button(object sender, EventArgs e)
        {
            printDoc.PrintPage += new PrintPageEventHandler(Print_Page);
            printDoc.DefaultPageSettings.Landscape = true;
            printDoc.DefaultPageSettings.PrinterResolution.Kind = PrinterResolutionKind.High;
            printDoc.Print();
        }
  1. Print_Page Methode
private void Print_Page(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            new PrintGraphics((Bitmap.FromFile("Wag.jpg")), e, printDoc);
        }
  1. PrintGraphics Klasse
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;


namespace DVD_Database
{
	
	public class PrintGraphics
	{
		public PrintGraphics(Image image,PrintPageEventArgs e, PrintDocument pd)
		{
            picture = new Bitmap(image);
            printDoc_PrintPage(e);
		}
        // -------------- event handler ------------------------------------
        public void printDoc_PrintPage(PrintPageEventArgs e)
        {
            int leftMargin = e.MarginBounds.Left;
            int topMargin = e.MarginBounds.Top;
            Graphics g = e.Graphics;
            g.PageUnit = GraphicsUnit.Pixel;
            g.DrawImage(picture, 100, 100, 6435.000f, 4360.000f);
        }

        //-------------- end of event handlers -----------------------------
        private Bitmap picture;
	}
}

Erläuterung:

  1. Ein Button (kann auch ein Menüeintrag, oder Ähnliches sein) als Steuerelement für Benutzereingabe. Darin (für mich eigentlich unlogisch, gehört in Druck-Klasse) die Druckereinstellungen für "Breitbild" (Landscape) und Auflösung, und Weiterleitung an Print_Page(2.).
  2. (Für mich wiederrum eine unnötige Resourcenverschwendung) Weiterleitung an die PrintGraphics Klasse mit Bitmap(ausnahmsweise Hardcodiert ; Bild muß im selben Ordner sein wie die ausführbare .exe).
  3. PrintGraphics Klasse, welche die eingentlichen Arbeit macht: Das Bild mit entsprechender Bemaßung auf´s Papier bringen (exakt DVD-Cover Größe). Natürlich sind auch andere Formen(Rect, Cicle, Arc, String, usw.) und Farben möglich.

Ich hoffe, daß dies ausreicht.

MfG Dom.

PS: Closen

31.10.2007 - 22:16 Uhr

Warum? Hat jemand daran interesse?

Zum einen ist das speziell zum Drucken von DVD-Hüllen , zum anderen genauso Chaotisch aufgebaut wie es die Anleitungen von Mircosoft sind. Mir hat die Seite von O´Reilly (hier) sehr geholfen.

31.10.2007 - 22:02 Uhr

Dank der die vielen hilfreichen Antworten, habe ich mir eine eigene Print-Klasse zusammenbauen können. Nicht so schön wiederverwendbar wie in Java, aber für meine Zwecke ausreichend.

Dom.

29.10.2007 - 20:33 Uhr

Hallo Community

Ich befasse mich erst seit kurzem mit C#, habe aber schon in anderen Sprachen programmiert.

Im Moment bin ich auf der Suche nach einer "einfachen" Klasse , mit der ich Bilder im Querformat mit einer bestimmten Größe (immer die selbe) drucken kann.
In Java hatte ich mir eine einfache Klasse (79 Zeilen) geschrieben, die perfekt funktioniert:

package xyz; // abzuändern für das jeweilige Projekt

import java.util.Arrays;
import java.awt.Image;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.PrintQuality;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.ServiceUI;
import javax.print.DocPrintJob;
import javax.print.Doc;
import javax.print.SimpleDoc;
import javax.print.PrintException;

public class PrintGraphics {
    PageFormat pageFormat;
    Paper paper;
    public static void main(String args []) {
//        new PrintGraphics();
    }
    public PrintGraphics(Image image) {
        final String sErrNoPrintService = "Es ist kein passender Print-Service installiert.";
        String s2ndParm = null;
        int idxPrintService = -1;
        DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(MediaSizeName.ISO_A4);
        aset.add(OrientationRequested.LANDSCAPE);
        aset.add(PrintQuality.HIGH);
        aset.add(new MediaPrintableArea(10, 10, 190, 277, MediaPrintableArea.MM));
        try {
            PrintService prservDflt = PrintServiceLookup.lookupDefaultPrintService();
            PrintService[] prservices = PrintServiceLookup.lookupPrintServices(flavor, aset);
            if (null == prservices || 0 >= prservices.length) {
                if (null != prservDflt) {
                    prservices = new PrintService[] { prservDflt };
                } else {
                    System.err.println(sErrNoPrintService);
                    System.exit(3);
                }
            }
            PrintService prserv = null;
            if (0 <= idxPrintService && idxPrintService < prservices.length) {
                prserv = prservices[idxPrintService];
            } else {
                if (!Arrays.asList(prservices).contains(prservDflt)) {
                    prservDflt = null;
                }
                prserv = ServiceUI.printDialog(null, 50, 50, prservices, prservDflt, null, aset);
            }
            if (null != prserv ) {
                pageFormat = new PageFormat();
                paper = new Paper();
                paper.setSize(594.936, 841.536);
                paper.setImageableArea(100, 100, 594.836, 841.436);
                pageFormat.setOrientation(PageFormat.LANDSCAPE);
                pageFormat.setPaper(paper);
                if (null == s2ndParm || !s2ndParm.equalsIgnoreCase("np")) {
                    DocPrintJob pj = prserv.createPrintJob();
                    Doc doc = new SimpleDoc(new MyPrintableObject(image), flavor, null);
                    pj.print(doc, aset);
                }
            }
        } catch (PrintException pe) {
            System.err.println(pe);
        }
    }
}

Hat "zufällig" jemand etwas Ähnliches schon in petto, bzw. gibt es die Möglichkeit, diese Klasse direkt in C# einzubinden?

MfG Dom.

29.09.2007 - 10:09 Uhr

Hallo

Bin neu im C#-Bereich, habe allerdings schon einige Jahre Erfahrung in der objektorientierten Programmierung (CGI-Script, Java-Script, Java, PHP), und will jetzt meine Programme in C# (Visual-C#) umschreiben. Dabei stoße ich immer wieder auf Probleme bei der Umsetzung, da ein Problem in der einen Sprache anders gelöst wird, als in der anderen. Dieses Forum, das ich bisher nur als Gast durchstöberte, hat mir schon mehr geholfen, als die 3 Bücher, welche nicht billig waren!
Dafür wollte ich mich bedanken.

MfG Dom. 😁