MessageBox(en) für BB+ und BB3D

Übersicht BlitzBasic DLLs und Userlibs

Neue Antwort erstellen

simi

Betreff: MessageBox(en) für BB+ und BB3D

BeitragSo, Feb 20, 2005 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Da BB mit Notify, Confirm und Proceed nur begrenzte Möglichkeiten von Meldungen erlaubt, dachte ich, ich suche mal alle Constanten zu der API-Funktion MessageBox:
Code: [AUSKLAPPEN]

;MessageBox(window,Title,Text,Flags)
;===================================
;
;----------------------------------------------------------
;Userlib:
;----------------------------------------------------------
;.lib "user32.dll"
;MessageBox%(hWnd%,lpText$,lpCaption$,uType%):"MessageBoxA"
;-----------------------------------------------------------
;
;
;window   = Handle des Windows, zu dem das Fenster hinzugefügt werden soll... (QueryObject(window,1))
;
;Title    = Text in der Titelleiste
;
;Text     = Text im Fenster
;
;Flags    =   Buttons:
;         --------
;         $0 = OK
;         $1 = OK, Abbrechen
;         $2 = Abbrechen, Wiederholen, Ignorieren
;         $3 = Ja, Nein, Abbrechen
;         $4 = Ja, Nein
;         $5 = Wiederholen, Abbrechen
;         $6 = Abbrechen, Wiederholen, Weiter
;
;         Symbole:
;         --------
;         $10 = Error
;         $20 = Frage
;         $30 = Achtung
;         $40 = Information
;
;         Markierter Button:
;         ------------------
;         $0,$100,$200,$400 = Button1,Button2,Button3,Button4
;
;         Verhalten mit dem angegeben window:
;         -----------------------------------
;         $0    = Eingabe muss erfolgen, immer über dem window...
;         $1000 = Gleich wie $0, aber zuoberst auf der ganzen Windowsoberfläche
;         $2000 = Eigenständig, aber zuoberst im aktuellen Task
;
;         Weitere Flags:
;         --------------
;         $4000   = Fügt einen Help Button hinzu (Kann aber leider mit BB nicht abgefragt werden ;( )
;         $80000  = Text und Titel rechtsbündig
;         $100000 = Alles irgendwie verkehrt (Arbisches-System) ;)
;         $40000  = zuoberst (Topmost)
;
;
;Rückgabe =   $1  = OK (Oder auch Kreuzchen wenns nur einen OK-Button hat)
;         $2  = Abbrechen, [Esc], Fenster-Schliessen-Button
;         $3  = Abbrechen nur bei $3
;         $4  = Wiederholen
;         $5  = Ignorieren
;         $6  = Ja
;         $7  = Nein
;         $10 = Wiederholen nur bei $6
;         $11 = Weiter

simi

BeitragSo, März 13, 2005 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
So, dann noch eine Datei-Öffnen/Speichern Dialogbox, die ein bisschen mehr Features als die Standardmässige von BB hat....
BlitzBasic: [AUSKLAPPEN]

;================================================================================================
;RequestFile2$([Modus=0,Pfad=\"\",Dateitypen=\"\",Titel=\"\",Flags=0,Parentwindow=0])
;------------------------------------------------------------------------------------------------
;Libs:
;=====
;.lib \"comdlg32.dll\"
;GetOpenFileName%(lpofn*):\"GetOpenFileNameA\"
;GetSaveFileName%(lpofn*):\"GetSaveFileNameA\"
;=====
;.lib \"kernel32.dll\"
;ptr_helper__%(a*,b%,c%):\"MulDiv\"
;-------------------------------------------------------------------------------------------------
;Modus: 0 = Laden (standard)
; 1 = Speichern unter
;
;Pfad: Startpfad (z.B. C:\)
;
;Dateitypen: Beschreibung plus dazugehörigen Dateitypen (mehrere durch Semikolon trennen) und das ganze durch
; | (Alt Gr+7) trennen. (Besipiel:\"Grafiken|*.bmp;*.png;*.jpg|All Files|*.*\")
;
;Titel: Text in der Windowsleiste....
;
;Flags: $2 Überschreiben-DialogBox (bei m=1)
; $4 \"Schreibgeschützt öffnen\" verstecken
; $10 Hilfe Button rechts unten (kann mit BB nicht abgefragt werden!! Wink)
; $200 MultiSelect (am Besten mit Style $80000 kombinieren)
; $1000 Nur existierende Files können geöffnet werden, ansonsten Fehlermeldung
; $2000 Meldung erzeugen, wenn Datei nicht existiert
; $20000 Kein Netzwerkbutton (nur bei altem Style)
; $80000 Explorer-Style (gut bei MultiselectFlag)
;
;Parentwindow: nur für B+, Fenster, zu dem die Dialogbox gehört => QueryObject(window,1)!!!!!
;--------------------------------------------------------------------------------------------------
;Rückgabe:
;Dateipfad oder \"\" wenn abgebrochen wurde.
;Bei multiselect wird zuerst der Pfad, und dann die Dateien getrennt durch Leerzeichen zurückgeliefert...
;(z.B. C:\Windows\ File.zip File2.y File3....)
;========================================================================================================

Function RequestFile2$(m=0,p$=\"\",f$=\"\",t$=\"\",flags=0,w=0)
If f = \"\" Then f = \"All Files,*.*\"
Struct = CreateBank(76)
File = CreateBank(400)
Filter = CreateString(Replace(f,\"|\",Chr(0))+Chr(0))
title = CreateString(t)
path = CreateString(p)

PokeInt Struct,0,76;Strukturlänge
PokeInt Struct,4,w;Owner Window

PokeInt Struct,12,ptr_helper__(Filter,1,1);Filter;



PokeInt Struct,28,ptr_helper__(File,1,1);Filename+phat;
PokeInt Struct,32,400;Filename Buffer size +phat

PokeInt Struct,44,ptr_helper__(path,1,1)*(p<>\"\");startordner;
PokeInt Struct,48,ptr_helper__(title,1,1)*(t<>\"\");Text in Titelleiste;

PokeInt Struct,52,flags;Flags;

PokeInt struct,60,ptr_helper__(Path,1,1);Immer Endungen

If m=0 Then e=GetOpenFileName(Struct)
If m<>0 Then e=GetSaveFileName(struct)
s$ = PeekString(File)

FreeBank Struct
FreeBank File
FreeBank Filter
FreeBank title
FreeBank path

If e = 0 Then Return \"\"
Return s
End Function

Function CreateString(s$)
b = CreateBank(Len(s)+1)
For x= 0 To Len(s)-1
y=Asc(Mid(s,x+1,1))
PokeByte b,x,y
Next
Return b
End Function

Function PeekString$(b)
For x = 0 To BankSize(b)-1
c = PeekByte(b,x)
If c = 0 Then
c = 32:a=a+1
Else
a=0
End If

s$=s+Chr(c)
If a = 2 Then Exit
Next
Return s
End Function


... und noch eine Colorauswahl (für B3D):
BlitzBasic: [AUSKLAPPEN]

;ColorRequester2([Flags,Color,Vorlagecolors])
;=============================================
;LIBs:
;=====
;.lib \"kernel32.dll\"
;ptr_helper__%(a*,b%,c%):\"MulDiv\"
;====
;.lib \"comdlg32.dll\"
;ChooseColor%(b*):\"ChooseColorA\"
;===================================================
;Flags = 2 = Mit \"Farben definieren\" öffnen (Default)
; 4 = Button \"Farben definieren\" ausschalten (grau)
; 8 = Hilfe-Button neben dem x
; Flags sind kombinierbar!
;
;Color = Voreingestellte Farbe in BGR (in API-Funktionen immer so) der voreingestellter Farbe (Default = $000000)
; z.B Rot=$0000FF
;
;Vorlagecolors = Handle einer Bank, die 64 Byte gross ist, in der die Vorlagecolors eingestellt und ausgelesen
; werden können.... Format: Immer 4 Byte pro Frabe
; 0 Color1 Red
; 1 Color1 Green
; 2 Color1 Blue
; 3 Color1 Reserved (=0)
; 4 Color2 Red
; ....
; 62 Color16 Blue
; 63 Color16 Reserved (=0)
;-----------------------------------------------------------------------------------------
;RÜCKGABE: Ausgewählte Farbe (BGR!!) oder -1 wenn abbrechen geklickt wurde...
;=========================================================================================

Function RequestColor2(f=2,d=0,b2=0)
If b2 = 0 Then b2=CreateBank(64):l=1
b1=CreateBank(36)
PokeInt b1,0,36
PokeInt b1,12,d
PokeInt b1,16,ptr_helper__(b2,1,1)
PokeInt b1,20,$1+f

x=ChooseColor(b1)
w=PeekInt(b1,12)
FreeBank b1
If l Then FreeBank b2
If x=0 Then Return -1
Return w
End Function

Sebastian

BeitragSo, März 13, 2005 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Laufen die DateiDialoge stabil ????

Es gab hier schon mal sowas das lief 2-mal und dann nie wieder ....

(Ich galube das war nur ne Demo Laughing Laughing)
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

Wild-Storm

BeitragSo, März 13, 2005 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
teste es halt aus...
Visit http://www.next-dimension.org
-------------------------------------------------
Freeware Modelle, Texturen & Sounds:
http://www.blitzforum.de/forum...hp?t=12875
 

OJay

BeitragSo, März 13, 2005 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
nein, tun sie nicht. das wurde bereits dutzende male ausprobiert. es gibt ein problem bei der übergabe der 16bit strings...

verwendet lieber die blitzsys.dll.

simi

BeitragSo, März 13, 2005 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir laufen sie stabil.... Confused

Es werden hier sowieso keine Strings übergeben, nur eine Bank, der Rest ist eben in dieser Bank....

simi

BeitragSo, Apr 10, 2005 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nun noch der letzte Teil, nämlich der Fontdialog....:
BlitzBasic: [AUSKLAPPEN]

;RequestFont2([Flags,window,Name,Grösse,Fett,Kursiv,Unterstrichen,Minimum,Maximum])
;==================================================================================
;Libs:
;-----
;.lib \"comdlg32.dll\"
;ChooseFont%(b*):\"ChooseFontA\"
;
;.lib \"kernel32.dll\"
;ptr_helper__%(a*,b%,c%):\"MulDiv\"
;==================================================================================
;Flags: $3 Bildschirm- & Druckerschriften (Standard)
; $40000 Nur TrueType-Fonts
; $1 Nur Bildschirmfonts
; $400 Nur ANSI-Fonts
; $4000 Nur Fixed-Pitch Fonts. (Immer gleicher Abstand, auch wenn Fett)
; $800 Keine Vektor-Fonts
; $20000 Nur Skalierbate Fonts
;
; $40 Vorauswahl zulassen
; $2000 Grösse einschränken...
; $100 Effekte anzeigen (Farbe/Unterstrichen/Durchstrichen)
; $10000 Meldung, wenn ausgewählte Font nicht existiert...
; $100000 Keine Beispielsanzeige
;
;window:Handle des Fensters zu dem die Auswahl gehören soll, oder 0.
;
;Name: Name der Voreingestellten Font (Flag $40 muss gesetzt sein!)
;
;Grösse:Grösse der Voreingestellten Font (Flag $40 muss gesetzt sein!)
;
;Fett: Fett(1) oder nicht(0) (Flag $40 muss gesetzt sein!)
;
;Kursiv:Kursiv(1) oder nicht(0) (Flag $40 muss gesetzt sein!)
;
;Unterstrichen: Unterstrichen(1) oder nicht(0) (Flag $40 muss gesetzt sein!)
;
;Minimum: Kleinste Grösse die man einstellen kann (Flag $2000 muss gesetzt sein!)
;
;Maximimum: Grösste Grösse die man einstellen kann (Flag $2000 muss gesetzt sein!)
;==================================================================================
;Rückgabe: 0, wenn der Dialog abgebrochen wurde
; ansonsten Handle, der gewälten Font....
;
;ACHTUNG: Farbe und Durchgestrichen werden nicht unterstützt...
;==================================================================================



Function RequestFont2(f=$3,w=0,n$=\"\",g=0,d=0,k=0,u=0,min=1,Max=100)
b=CreateBank(60)
b2=CreateBank(28+32)

PokeInt b,0,60
If w <> 0 Then PokeInt b,4,QueryObject(w,1)
PokeInt b,12,ptr_helper__(b2,1,1)
PokeInt b,20,f+$800000
;PokeInt b,24,c
PokeInt b,52,min
PokeInt b,56,max

PokeInt b2,0,g/0.6
PokeInt b2,16,d*900
PokeByte b2,20,k
PokeByte b2,21,u
For x = 1 To 32
If x > Len(n) Then Exit
PokeByte b2,27+x,Asc(Mid(n,x,1))
Next

ergebniss = ChooseFont(b)

If ergebniss = 1 Then
For x = 1 To 32
If PeekByte(b2,27+x)=0 Then Exit
F_Name$ = F_Name + Chr(PeekByte(b2,27+x))
Next
F_Grosse = Abs((PeekInt(b2,0))*0.6)
F_Fett = (PeekInt(b2,16)>400)
F_Kursiv = PeekByte(b2,20)
F_Unterst = PeekByte(b2,21)
F_Color = PeekInt(b,24)
End If

FreeBank b:FreeBank b2

If ergebniss = 0 Then Return

Return LoadFont(F_Name,F_Grosse,F_Fett,F_Kursiv,F_Unterst)
End Function
 

SebastianB

BeitragDi, Apr 12, 2005 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

bei mir läuft RequestFile2$() überhaupt nicht, auch wenn ich keine Parameter übergebe. Man sieht nur kurz wie das Blitzfenster inaktiv wird und anschließend wieder aktiviert wird.

RequestFont2$() macht ebenfalls Probleme. Wenn ich eine Schrift ausgewählt habe, dann kommen folgende Meldungen:
- offset out of range in folgender Zeile BlitzBasic: [AUSKLAPPEN]
If PeekByte(b2,27+x)=0 Then Exit

- Memory access violation
- blitzcc.exe hat ein Problem festgestellt...
- Die Anweisung in "0x0015489f" verweist auf Speicher in "0x1950a31". Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden.

Ich weiß nicht, wieso er "offset out of range" meldet. x hat zu dieser Zeit den Wert 1, also greifen wir auf Offset 28 zu und das liegt doch im gültigen Bereich.

Ich benutze Windows XP Professional SP2 und Blitz3D 1.90.
Weiß vielleicht jemand, wo der Fehler liegt?

Viele Grüße
Never change a running system

simi

BeitragDi, Apr 12, 2005 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
hi SebasionB

Ist mir völlig ein Rätsel, warum es nicht funktioniert....

Leider kann ich es nur mit B+ testen, und habe auch nur das SP1....

Ich habe schnell ein Testprogramm erstellt, geht es bei dir??

Arrow http://home.datacomm.ch/dtgeisseler/libtest.exe

cu simi
 

SebastianB

BeitragDo, Apr 21, 2005 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Entschuldigt, dass ich so spät antworte, aber mein Computer wollte nicht ins Internet. Ich habe das ganze noch einmal auf Windows XP Home Edition SP1 versucht, erhalte aber trotzdem die gleichen Fehlermeldungen.

Ich bin jetzt leider zu spät gekommen. Simi, wärest du noch einmal so freundlich und würdest dein Testprogramm noch einmal hochladen? Übers Wochenende komme ich leider wieder nicht ins Internet.

Noch mal vielen Dank

SebastianB
Never change a running system

Neue Antwort erstellen


Übersicht BlitzBasic DLLs und Userlibs

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group