Seite 1 von 3
codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 30.01.2010 23:46
von pjascii
Hallo zusammen
als Anfänger in PureBasic habe ich mir erst einmal die Beispiele vorgenommen. Leider funktionieren einige nicht. Library, falsche Parameter bei MessageBox, print, nur schwarze Balken, etc.
Kurz zu dem was ich machen möchte:
Windows 7 bietet die Möglichkeit, aus einer VHD Datei zu booten. Ich möchte eine kleine Anwendung schreiben, welche den Benutzer fragt, wie der Booteintrag im Bootloader heissen soll und sich mit Hilfe der Filesystemfunktionen auf die VHD Datei zu positionieren und diese auszuwählen. Den generierten Eintrag im BCD möchte ich dann ausdrucken können. Der Rest ist dann simpel.
Das heisst, ich benötige einige Codeschnippsel
1. Filesystem, positionieren und auswählen einer Datei aus diversen angeschlossenen Festplatten
2. Ausgeben auf einem ausgewählten Drucker
wenn ich zuviel verlange, dann bitte diesen Beitrag ignorieren.
Das fertige Programm werde ich gerne mit Source einstellen, wenn daran Interesse besteht.
LG
Peter
Re: codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 31.01.2010 04:57
von Little John
pjascii hat geschrieben:als Anfänger in PureBasic habe ich mir erst einmal die Beispiele vorgenommen. Leider funktionieren einige nicht. Library, falsche Parameter bei MessageBox, print, nur schwarze Balken, etc.
Meinst Du die Beispielprogramme die im Lieferumfang von PB enthalten sind? Welche Version?
Wenn das die aktuelle PB-Version 4.41 RC 1 betrifft, solltest Du das im (am besten englischen) Bug-Forum melden.
pjascii hat geschrieben:Das heisst, ich benötige einige Codeschnippsel
1. Filesystem, positionieren und auswählen einer Datei aus diversen angeschlossenen Festplatten
Ich würde zunächst eine Liste aller verfügbaren Laufwerke erzeugen, die mich interessieren:
Code: Alles auswählen
; PB 4.40
EnableExplicit
Procedure GetDrives (List Drive$())
; Liefert eine Liste aller angeschlossenen Laufwerke,
; die den gewählten Typen entsprechen.
Protected i, d$
For i = 'A' To 'Z'
d$ = Chr(i) + ":"
Select GetDriveType_(d$)
Case #DRIVE_FIXED, #DRIVE_REMOVABLE, #DRIVE_REMOTE, #DRIVE_RAMDISK
AddElement(Drive$())
Drive$() = d$
; Nur zur Information, wird hier nicht benutzt:
Case #DRIVE_CDROM
; The drive is a CD or DVD drive.
Case #DRIVE_UNKNOWN
; The drive type cannot be determined.
Case #DRIVE_NO_ROOT_DIR
; The root path is invalid.
EndSelect
Next
EndProcedure
;-- Demo
NewList Drive$()
GetDrives(Drive$())
ForEach Drive$()
Debug Drive$()
Next
In dem Demo-Teil dieses Codes machst Du dann für jedes gefundene Laufwerk statt
Debug Drive$() eine
rekursive Dateisuche.
pjascii hat geschrieben:2. Ausgeben auf einem ausgewählten Drucker
Ich kann bestätigen, dass unter Windows XP mit PB 4.41 RC 1 das mitgeliferte Beispielprogramm
Printer.pb nur schwarze und graue Balken ausgibt. Ich weiß leider nicht woran das liegt und wie es richtig geht.
Gruß, Little John
Re: codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 31.01.2010 08:53
von Pelagio
Little John hat geschrieben:
Ich kann bestätigen, dass unter Windows XP mit PB 4.41 RC 1 das mitgeliferte Beispielprogramm Printer.pb nur schwarze und graue Balken ausgibt. Ich weiß leider nicht woran das liegt und wie es richtig geht.
Das liegt daran das seit PB4.4 bei DrawText unbedingt die Farbe dazugeschrieben weden muss ansonsten schreibt DrawText Schwarz auf Schwarz
Code: Alles auswählen
DrawText(100, 400, "PureBasic Printer Test 2", #Black, #White)
Allerdings gibt es in diesem Falle ein Problem wenn man auf farblich oder unterschiedlichen bzw. unbekannten Blättern ausdruckt. Ich denke mir, das dies vielleicht sogar als
BUG zu bezeichnen wäre, oder?
Re: codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 31.01.2010 09:57
von Little John
Hi,
Pelagio hat geschrieben:Das liegt daran das seit PB4.4 bei DrawText unbedingt die Farbe dazugeschrieben weden muss ansonsten schreibt DrawText Schwarz auf Schwarz
Code: Alles auswählen
DrawText(100, 400, "PureBasic Printer Test 2", #Black, #White)
Das würde ich als Bug bezeichnen: Entweder sollten per Voreinstellung Vorder- und Hintergrundfarbe unterschiedlich sein ( schwarz auf weiß wäre eine einigermaßen übliche Kombination

), oder der Compiler sollte eine Fehlermeldung ausgeben, wenn Vorder- und Hintergrundfarbe nicht angegeben sind (und die Hilfe sollte dann auch entspr. geändert werden).
//edit: Ich habe jetzt die Voreinstellung schwarz auf schwarz im engl. Forum als Bug gemeldet.
Pelagio hat geschrieben:Allerdings gibt es in diesem Falle ein Problem wenn man auf farblich oder unterschiedlichen bzw. unbekannten Blättern ausdruckt. Ich denke mir, das dies vielleicht sogar als BUG zu bezeichnen wäre, oder?
Das sehe ich persönlich nicht als Bug an, denn so ist es ja auch z.B. bei jedem normalen Textverarbeitungsprogramm. Wie soll man das Problem umgehen?
Mit
Code: Alles auswählen
DrawText(100, 400, "PureBasic Printer Test 2", #Black, #White)
druckt das Beispielprogramm
Printer.pb zwar den Text richtig, aber statt des Bildes erhalte ich nach wie vor nur eine graue Figur aus zwei Rechtecken.
Gruß, Little John
Re: codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 31.01.2010 10:13
von Pelagio
Little John hat geschrieben:
Das sehe ich persönlich nicht als Bug an, denn so ist es ja auch z.B. bei jedem normalen Textverarbeitungsprogramm. Wie soll man das Problem umgehen?
Dies ist nicht ganz richtig, bei einem Textverarbeitungsprogramm kann ich auf unterschiedlich farbliche Blättern drucken, ohne das um ein Zeichen ein weißer Kasten entsteht. Das heißt also das bei DrawText ohne Angabe der Hintergrundfarbe die Schrift auf transparentem Untergrund ausgegeben werden müsste.
Ps.:
Wie bekommst du es hin das "... hat geschrieben:" in die Titelzeile erscheint?
Re: codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 31.01.2010 10:31
von Little John
Pelagio hat geschrieben:Little John hat geschrieben:
Das sehe ich persönlich nicht als Bug an, denn so ist es ja auch z.B. bei jedem normalen Textverarbeitungsprogramm. Wie soll man das Problem umgehen?
Dies ist nicht ganz richtig, bei einem Textverarbeitungsprogramm kann ich auf unterschiedlich farbliche Blättern drucken, ohne das um ein Zeichen ein weißer Kasten entsteht. Das heißt also das bei DrawText ohne Angabe der Hintergrundfarbe die Schrift auf transparentem Untergrund ausgegeben werden müsste.
Ja, natürlich! Tut mir leid, ich bin wohl noch nicht ganz wach ...

Transparenz wird von PB neuerdings doch gut unterstützt. Dann geht das jetzt vielleicht irgendwie?
Pelagio hat geschrieben:Ps.:
Wie bekommst du es hin das "... hat geschrieben:" in die Titelzeile erscheint?
Wenn ich in Deinem Beitrag den
Zitieren-Knopf anklicke, dann steht in meinem Bearbeitungsfenster automatisch am Anfang:
Das zeigt die Foren-Software dann als "Pelagio hat geschrieben:" an. Wenn ich mehrere einzelne Teile aus Deinem Text zitieren will, muss ich das natürlich bei den weiteren Teilen am Zitatanfang selbst hinschreiben bzw. -kopieren.
Gruß, Little John
Re: codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 31.01.2010 10:39
von Pelagio

Danke Little John
Little John hat geschrieben:Dann geht das jetzt vielleicht irgendwie?
Mal sehen das ich heute noch Zeit finde, ich werde dann versuchen heraus zu finden ob und wie ich bei DrawText den Hintergrund 'Transparent' gestalten kann.
Re: codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 31.01.2010 10:47
von Little John
Gerne, keine Ursache!
Das mit der Transparenz geht tatsächlich!
Man muss die Transparenz einschalten, in der Hilfe zu DrawText() sieht man in dem Beispielcode wie's geht. Nur die separaten Beispielprogramme werden wohl etwas stiefmütterlich gepflegt. Mit eingeschalteter Transparenz brauchen dann Vorder- und Hintergrundfarbe nicht angegeben zu werden.
Gruß, Little John
Re: codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 31.01.2010 10:49
von Pelagio
Hallo,
Das Problem konnte ich doch schneller lösen als ich dachte, danke Little John du warst der Auslöser für die Lösung (DrawingMode(#PB_2DDrawing_Transparent)).
Code: Alles auswählen
If PrintRequester()
If StartPrinting("PureBasic Test")
LoadFont(0, "Arial", 30)
LoadFont(1, "Arial", 100)
If StartDrawing(PrinterOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(0))
DrawText(100, 100, "PureBasic Printer Test")
DrawingFont(FontID(1))
DrawText(100, 400, "PureBasic Printer Test 2")
FrontColor(#Blue)
Box(200, 600, 100, 100)
StopDrawing()
EndIf
StopPrinting()
EndIf
EndIf
Re: codeschnippsel erwünscht, da Examples nicht funktionieren
Verfasst: 31.01.2010 10:59
von Little John
Hi,
ich denke am besten wäre
#PB_2DDrawing_Transparent die Voreinstellung für
DrawText(). Das ist es doch wohl, was die meisten Leute intuitiv erwarten.
//edit:
Ich habe das jetzt auch mal
im englischen Forum angesprochen.
Gruß, Little John