German Desktop.exe funktioniert, Device.exe nicht - was mache ich falsch?

pikdame

New Member
Licensed User
Hallo, zusammen!

:sign0085:
Ich bin noch ein totaler Anfänger und habe ein Problem. Dazu einige Informationen:

Mein Programm:
Ich habe ein kleines Spiel programmiert, bei dem es darum geht, rechteckige Teile zu verschieben (Im Original sind es Holzklötzchen). Diese Teile sind in meinem Programm Panels, auf denen ich ImageButtons untergebracht habe. Ein Klick auf einen solchen Button löst eine Bewegung des Panels aus, auf dem er sich befindet. Daß sich die Teile nicht übereinanderschieben, habe ich folgendermaßen erreicht: Von jedem Teil gibt es eine Projektion auf das ForeLayer, so daß ich über FGetPixel prüfen kann, ob neben einem Teil frei ist oder nicht. Diese Projektion wird beim Verschieben eines Teils gelöscht, danach wird das Teil verschoben und an seinem neuen Ort wieder auf das ForeLayer projiziert. In der Menüleiste befinden sich außerdem Befehle, die einem ermöglichen, den Ausgangszustand wiederherzustellen (die Daten dazu werden aus einer CSV-Datei geladen), einen Spielstand zu speichern oder zu laden (auch hierfür benutze ich CSV-Dateien), sich eine Info-Messagebox anzeigen zu lassen und eine andere Form aufzurufen, in der sich die Anleitung zum Spiel befindet.

Mein Problem:
Vom Code her dürfte das Programm eigentlich in Ordnung sein; jedenfalls funktionierte es beim Testen und als ich es als Desktop.exe kompiliert habe. Nun wollte ich es natürlich auch auf meinem PPC spielen und habe es als Device.exe kompiliert, aber auf meinem PPC läuft es nicht. Soll heißen: Die Form öffnet sich, es wird alles korrekt dargestellt, nur wenn ich auf die Buttons klicke, tut sich nichts. Allein der Menüpunkt "Info", der eine Messagebox öffnet, und der Menüpunkt "?", der eine andere Form mit der Spielanleitung öffnet, funktionieren. Das Laden eines Spielstandes ist ebenfalls nicht möglich, obwohl der Öffnen-Dialog dargestellt wird und ordnungsgemäß benutzbar ist. Das Speichern des Spielstandes ist möglich (im Moment kann ich halt nur die Ausgangskonstellation speichern, aber die Daten, die in der CSV-Datei landen, sind korrekt). Über das Herstellen der Ausgangskonstellation kann ich keine Angaben machen, weil ich ja erst gar nicht darüber hinauskomme und daher natürlich keinen Unterschied feststellen kann. Die Form läßt sich ganz normal schließen.

Meine bisherigen Maßnahmen:
Ich habe zum Vergleich eine andere, einfache Anwendung geschrieben, die zwei Zahlen zusammenzählen sollte (mit zwei Textboxen und einem Button). Die funktioniert auf meinem PPC.
Dann habe ich natürlich weiter überlegt, woran es liegen könnte, und kam zu dem Schluß, daß ich vielleicht Bibliotheken hinzufügen muß. Also tat ich das. Ich habe mich mal für die ImageLib.dll, die FormLib.dll und die TabControl.dll entschieden, weil ich den Eindruck hatte, daß diese etwas mit den Befehlen zu tun haben, die ich verwendet habe. Danach habe ich wieder zwei Anwendungen kompiliert. Fazit: Die neue Desktop.exe funktioniert, die neue Device.exe immer noch nicht. Und das ist der Punkt, an dem ich fragen möchte: Was mache ich falsch? Muß es noch eine andere Bibliothek sein? Ich könnte mir nicht vorstellen, welche, und möchte lieber nicht weiter herumprobieren, weil ich nicht weiß, wie sich das u. U. auf meinen PPC auswirken könnte.

Mein PPC: acer n30 mit Windows Mobile 2003 SE (Basic4ppc ist hier nicht installiert; ich programmiere nur an meinem Hauptcomputer).

Meine Basic4ppc-Version: Ich lese unter Menü>Help>About "Version 4.05".

Mein Quellcode: Sollte anhängen. Ich glaube, man kann sich sonst schlecht vorstellen, wie das ganze aussieht.

Wenn Ihr Euch bis hierher "durchgelesen" habt, schon mal vielen Dank dafür! Ich hoffe, Ihr könnt mir weiterhelfen!


Gruß,

pikdame.
 

Attachments

  • quovadis.sbp
    21.3 KB · Views: 404

specci48

Well-Known Member
Licensed User
Longtime User
Hallo pikdame,

willkommen im Basic4ppc Forum.
Zunächst einmal :sign0188:

Als "totaler Anfänger" hast Du ein super Spiel programmiert. Ich habe mir zwar den Code nicht im Detail angesehen, aber die Umsetzung der (bekannten) Spielidee finde ich erste Klasse! Und die Beschreibung in Deinem Post kann man als kleinen Roman durchgehen lassen ;)

Zunächst einmal etwas generelles zu den Zusatz-Bibliotheken. Diese werden nur benötigt, wenn Du spezielle Funktionen aus eben diesen Bibliotheken verwendest. Dann müssen Sie aber auch unter Tools - Components eingebunden werden, es muss ein entsprechenden Objekt per Menu Tools - Add Object oder per Programm erzeugt werden. Für die Lauffähigkeit der Anwendung sind dann genau diese eingebundenen Komponenten mit auszuliefern, sowohl auf dem Desktop als auch auf dem Device.
Lange Rede kurzer Sinn, Du hast nur Standardkomponenten verwendet, daher kann es nicht an fehlenden Bibliotheken liegen.
Ich habe das Programm einmal selbst übersetzt und auf meinen PPC übertragen ... und dort läuft es fehlerfrei!!! Ich kann Speichern und auch wieder Laden. Ein Klick auf eine "Blockkante" verschiebt den Block. Nur Neu funktioniert erst, nachdem ich mir selbst eine neu.csv angelegt hatte.

Jetzt stellt sich die Frage, warum läuft es bei mir und bei Dir nicht. Ich verwende zwar die Version 5.00, aber daran dürfte es eigentlich nicht liegen.
Als Test habe ich einmal das von mir erzeugte Device.exe angehängt. Probier doch bitte, ob diese Version bei Dir funktioniert.


specci48
 

Attachments

  • Quo.zip
    57.7 KB · Views: 404

pikdame

New Member
Licensed User
Hallo, specci48,

vielen Dank für Deine Antwort und Dein Kompliment! Hat mich sehr gefreut. :sign0060:

:signOops: Tut mir leid, daß Du Dir erst eine neu.csv anlegen mußtest! Ich hatte natürlich eine kreiert, habe aber leider vergessen, sie mit anzuhängen.
Das Einbinden der Bibliotheken hatte ich, soweit ich es beurteilen kann, genauso gemacht wie von Dir beschrieben, aber daran lag's ja nun nicht.

Vielen Dank auch für die kompilierte Datei, aber sie funktioniert leider auch nicht. Ich muß also wohl annehmen, daß es an meinem PocketPC liegt, oder?
Na, das ist was! Da schreibe ich ein Programm, und dann kann es womöglich jeder benutzen, nur ich nicht... :(

Glaubst Du, ich könnte es trotzdem unter "Share Your Creations" posten (dafür würde ich alles Deutsche erst ins Englische übersetzen)?


Gruß,

pikdame
 

specci48

Well-Known Member
Licensed User
Longtime User
Hallo pikdame,

ich fände es toll, wenn Du die Source unter "Shared Creations" allen zur Verfügung stellen würdest. :)
Trotzdem sollte man Deinen Fall nochmal näher betrachten. Es kann doch wohl nicht sein, dass die ganz normalen Standard-Funktionalitäten auf Deinem PPC nicht funktionieren. Damit wäre dann ja auch ein Zweck von Basic4ppc verfehlt: Auf dem Desktop entwickeln und auf dem PPC ausführen.

Nach meinen Erfahrungen in diesem Forum habe ich noch einen Lösungsvorschlag für Dich:
Du besitzt einen PPC mit Windows Mobile 2003 SE. Mit dem System wurde meist eine "frühe" Version des .Net CF 1 ausgeliefert und das hatte noch einige unangenehme Bugs. Ich weiß leider nicht mehr genau, welche Funktionen es betriftt, aber möglich wäre, dass hier genau so ein Fehler zuschlägt.

Daher mein Vorschlag:
Installiere auf Deinen PPC das letzte Update hierfür (.Net CF 1.0 SP3):
http://www.microsoft.com/downloads/details.aspx?FamilyId=A5A02311-194B-4C00-B445-F92BEC03032F&displaylang=en

Momentan gehe ich jede Wette ein, dass Dein Programm danach funktioniert. Auch wenn Du es mit der Version 4.05 compilierst.

specci48
 

stbi

Member
Licensed User
Longtime User
ich habs ...

Hallo Pikdame, es liegt an den Farben ... auf dem Desktop ist cGray = Hintergrundgrau (-8093052) ... auf dem PPC ist es bei mir (MDA compact) anders (-8355712) ... bau mal die beiden Zeilen ein, dann siehts Du es:

B4X:
Sub qdreilinks_Click
[B]Msgbox(cGray)
Msgbox(quovadis.FGetPixel(qdrei.Left - 2, qdrei.Top))[/B]
   If quovadis.FGetPixel(qdrei.Left - 2, qdrei.Top) = cGray Then
   qdreiErase
   qdrei.Left = qdrei.Left - 51
   qdreiAbb
   End If
End Sub

Ansonsten :sign0188:, nur leider habe ich das Spiel bisher nicht kapiert :signOops:
Viele Grüße,
Stefan
 

specci48

Well-Known Member
Licensed User
Longtime User
Hallo stbi,

dass mit den anderen Farbwerten ist normal, da ein PPC generell nicht so viele Farben darstellen kann wie der Desktop.
Außerdem läuft es meinem WM5 Device wie gesagt problemlos. Falls es auf Deinem auch nicht geht, solltest Du es auch einmal mit dem Update probieren.


specci48

P.S.: Die Spielregeln findest Du im Menü unter dem "?" ...
 

stbi

Member
Licensed User
Longtime User
Hallo specci48,

ich wollte lediglich darauf hinweisen, dass man sich auf die Farben nicht verlassen kann, um freie Positionen zu finden, weil die eben von Gerät zu Gerät abweichen können.

Das Update auf SP3 hatte ich früher schon mal installiert, daher bin ich mir nicht sicher, ob es den Fehler behebt. Außerdem kann man davon ausgehen, dass die meisten Anwender ihren PDA so betreiben, wie sie ihn bekommen haben, also ggf. ohne SP3.

Ich persönlich würde Pikdame auch empfehlen, einen "geräteunabhängigen" Weg zu gehen und die freien/belegten Positionen über ein Array o.ä. verwalten.

Viele Grüße,
Stefan
 

pikdame

New Member
Licensed User
Hallo, allerseits!

Nur auf die Schnelle: Vielen Dank für Eure Tips. Ich habe gesehen, daß .Net CF 1.0 SP3 bei mir schon installiert ist, aber ich kann es ja mal deinstallieren und dann neu installieren. Falls das nichts bringt, könnte ich immer noch mit den Farben experimentieren. Vielleicht hilft's ja.
Ich werde mich heute abend wieder melden.

Bis dann,

pikdame.
 

specci48

Well-Known Member
Licensed User
Longtime User
Außerdem kann man davon ausgehen, dass die meisten Anwender ihren PDA so betreiben, wie sie ihn bekommen haben, also ggf. ohne SP3.
Diese Aussage lasse ich mal so stehen, auch wenn ich der Meinung bin, dass die Anwendung ruhig vorschreiben darf, welche Systemvorrausetzungen für den Betrieb der Applikation gelten.

Ich persönlich würde Pikdame auch empfehlen, einen "geräteunabhängigen" Weg zu gehen und die freien/belegten Positionen über ein Array o.ä. verwalten.
In diesem Punkt bin ich ganz Deiner Meinung. :)

ich wollte lediglich darauf hinweisen, dass man sich auf die Farben nicht verlassen kann, um freie Positionen zu finden, weil die eben von Gerät zu Gerät abweichen können.
Warum sollte dies nicht gehen? Es ist richtig, dass die Werte auf dem Desktop und dem Device unterschiedlich sind, aber dafür verwendet man ja gerade solche Konstanten, statt mit konkreten Werten zu arbeiten. Wenn ich auf dem Device einem Element die Farbe cGrey spendiere, dann kann ich diese Farbe anschließend auch wieder problemlos abfragen, denn sowohl beim Setzen als auch beim Abfragen wird immer auf den device-internen Wert geprüft.
Und noch einmal der Hinweis: Ich habe ein Gerät mit WM5 der "ersten Version", d.h. mit .Net CF 1.0 SP3, und bei mir läuft das Spiel fehlerfrei!

Halten wir also Fest:
a) Es ist sinnvoll, die Prüflogik in dem Spiel (etwas) zu überarbeiten
b) Das aufgetretene Problem liegt nach euren Aussagen nicht an einer "alten" .Net CF Version
c) Das Problem ist würdig, mit Hilfe der restlichen Forumsmitglieder noch näher untersucht zu werden (ich persönlich mag solche Dinge nicht, wo niemand eine plausible Erklärung für hat ;))


:sign0152:

specci48
 
Last edited:

pikdame

New Member
Licensed User
Hallo, specci48 und stbi!


Gute Nachrichten: Jetzt läuft's! :sign0060:

Aber nun genauer: Es hat leider nichts gebracht, .NET CF 1.0 SP3 neu zu installieren.

Also habe ich mir den Hinweis mit der Farbe von Dir, stbi, zu Herzen genommen. Ich habe cGray durch cBlack ersetzt, weil m. E. schwarz und weiß einfach in allen Systemen den gleichen Wert haben müssen, und siehe da: Es geht! Du lagst also vollkommen richtig. :sign0098: Ich wäre nie darauf gekommen, weil ich dachte, Konstanten wären überall konstant. Für WM 2003 SE offenbar nicht... Sollte man sich vielleicht merken.

Das mit der Verwaltung der Positionen über ein Array klingt interessant. Ich hatte auch ursprünglich nach einem anderen Weg gesucht, die Positionen der Teile zu überprüfen, aber ich wußte nicht, wie ich es anfangen sollte. Dann kam ich auf die Idee mit den Farben und habe nicht mehr über eine evtl. günstigere Lösung nachgedacht. Das könnte aber durchaus ein neues Projekt für mich werden. Also danke für die Anregung!

Ich denke, ich werde vielleicht dennoch den (anglisierten) Quellcode so posten, wie er im Moment ist. Mal sehen.

Vielen herzlichen Dank nochmal für die tolle Hilfe!

:sign0136:

pikdame
 

specci48

Well-Known Member
Licensed User
Longtime User
:confused:

Hallo pikdame,

freut mich, das Dein tolles Programm endlich bei Dir läuft.

... und es freut mich auch nicht, denn mit dieser Lösung verstehe ich den Sinn und Zweck der Farb-Konstanten nicht mehr. Wenn sie sich wirklich unterschiedlich von Device zu Device verhalten, dann hat Microsoft mal wieder einen großen braunen Haufen von sehr fragwürdiger Konsistenz geschaffen :sign0148:

Oder kann stbi mir das nochmal genauer erklären?


specci48
 

stbi

Member
Licensed User
Longtime User
... und es freut mich auch nicht, denn mit dieser Lösung verstehe ich den Sinn und Zweck der Farb-Konstanten nicht mehr. Wenn sie sich wirklich unterschiedlich von Device zu Device verhalten, dann hat Microsoft mal wieder einen großen braunen Haufen von sehr fragwürdiger Konsistenz geschaffen
Traue keiner Konstanten, die Du nicht selbst definiert hast ;) Ne ehrlich, ich habe keine Ahnung, wer die Abweichung in den Konstanten verursacht. Vielleicht war es MS, vielleicht auch B4P, vielleicht mischt auch noch das Theme mit (es ist ja auch noch Transparenz über cGray im Code). Ich wollte mich auch nicht so weit in den Code einpfriemeln bzw. selbst Versuche anstellen, sondern nur auf die unmittelbare Ursache hinweisen.
Ich bin selber schonmal über ne Inkompatibilität zwischen Desktop und Device gestolpert, weiß aber nicht mehr, was es war, aber daher war ich hellhörig.

:sign0152:
:sign0100:
 

mhc

Member
Licensed User
Longtime User
Wie kann ich ein Image auf dem PPC verschieben?

Hallo,

ich bin neu mit Basic4ppc - daher kann es für meine Anfrage vielleicht eine einfache Antwort geben, die ich selber aber nicht finden kann :(

In einer Anwendung möchte ich mit dem Stift (bzw. Maus) ein Image auf dem Bildschirm verschieben.
Das funktioniert z.B. mit einem Panel ganz einfach mittels der Mouse-Events.
Ein Image-Control verfügt aber nicht über diese Events.
Also war mein Lösungsansatz, auf dem Panel das Image als child zu plazieren.
Gleichzeitig habe ich die Image-Eigenschaft enabled auf false gesetzt.
Funktioniert auf dem Desktop einwandfrei!

Compiliere ich für das Device, kann ich das Panel mit dem aufgesetzten Image nicht verschieben. Verzichte ich auf das Image, dann funktionierts.

Gibt es hierfür überhaupt eine Lösung?

Hier noch ganz kurz der Code:

Sub Globals
'Declare the global variables here.
Dim moveMouse 'boolean; wird gesetzt, wenn ein Panel mit Stift focusiert wird (MouseDown)
Dim ax, ay
End Sub

Sub App_Start
' Wir fügen eine Komponente Panel zur Form1 hinzu
AddPanel("Form1","Panel1",10,26,25,25)
AddEvent("Panel1" ,MouseDown,"MouseDown")
AddEvent("Panel1",MouseMove,"MouseMove")
AddEvent("Panel1",MouseUp,"MouseUp")
'Dieser verpassen wir ein Bild als Icon; setzen dieses Image aber als nicht-enabled, damit wir beim Anklicken das Panel erwischen
AddImage("Panel1","Bild",0,0,25,25)
Control("Bild").image="trash.jpg"
Control("Bild").Mode=cStretchImage
Control("Bild").enabled=false
Form1.Show
End Sub

Sub MouseDown (x,y)
moveMouse=true
ax=x
ay=y
End Sub

Sub MouseMove (x,y)
If moveMouse=true Then
Sender.Left=x-ax+Sender.Left
Sender.Top=y- ay + Sender.Top
End If
End Sub

Sub MouseUp (x,y)
moveMouse=false
'Nachfolgende IF-Anweisungen verhindern, daß wir das Panel ausserhalb des Display placieren
If Sender.Left<0 Then
Sender.Left=0
End If
If Sender.Left+Sender.Width>=form1.Width Then
Sender.Left=form1.Width-Sender.Width
End If
If Sender.top<27 Then
Sender.top=27
End If
If Sender.top+Sender.Height>=form1.Height Then
Sender.top=form1.Height-Sender.Height
End If

End Sub

Wäre schön, wenn ich einige Ideen bekommen könnte.

Danke für eure Hilfe im Vorraus, und einen guten Rutsch ins neue Jahr!

mhc
 
D

Deleted member 103

Guest
Hallo mhc,

hier hast du ein kein Beispiel von mir.

Ciao,
Filippo
 

mhc

Member
Licensed User
Longtime User
Danke an Filippo

Hallo Filippo,

danke für die sehr schnelle Hilfe. Habe dein Beispiel getestet (unter Version 5.8 - ja auch ich bin einer der "Neuen" Dank der Zeitschrift c't :)).

Das funktioniert einwandfrei:sign0188:

Die Library fgControls scheint echt eine Bereicherung zu sein.

Übrigens: Das ist jetzt nicht nur ein bisschen Herumprobieren von mir. Wer erinnert sich noch an das alte Brettspielchen "Steine schieben"? Das möchte ich auf dem PPC realisieren. Aber eben nicht nur mit Zahlen, sondern auch als Puzzle mit einem entsprechend zerlegtem Bild.

Danke nochmals.

mhc
 
D

Deleted member 103

Guest
dann wuensche ich dir viel Spass beim Programmieren.
Ich hoffe du stellst es allen zur Verfuegung, wenn es fertig ist.;)

Solltest du noch Fragen haben, dann melde dich hier nochmal.

Ciao,
Filippo
 

specci48

Well-Known Member
Licensed User
Longtime User
Hallo mhc,

willkommen hier im Basis4ppc Forum. :)

Eine kleine Notiz am Rande: Bitte für jedes (neue) Thema einen eigenen Thread aufmachen. Danke!


specci48
 

mhc

Member
Licensed User
Longtime User
Hallo,

danke nochmals euch beiden (Filippo, specci48) für die freundliche Begrüßung.

Filippo:
Habe das kleine Game im Forum eingestellt. Danke für deine Unterstützung - wenn ich auch letztendlich die Programmlogik wieder umgeschmissen habe, und ohne mouseevents arbeite :sign0137:

specci48:
Natürlich wollte ich zuerst einen neuen Thread aufmachen. Dachte mir aber, daß es zu diesem hier mit dem grundsätzlich Thema "funzt auf Desktop - nicht auf PPC" passen könnte. :)

:sign0136:

mhc
 
Top