Forum | | | | - Seite 1 - |
| Wilfried Friebe | KompilierenMarkierenSeparieren-Begin------------------------------------------------------------------
Declare Anzahl%, i%, Name$, Browse$, länge%
Cls
TextColor @RGB(255, 0, 100), -1
Set(CharSet, 0)
UseFont ARIAL, 15, 10, 1, 0, 0
@db(Open, #1,Musik.DBF)
@db(Use, #1)
Print db-Struktur von Musik.DBF
Print Datensätze: ;&dbRecCount
Print Felder: ;%dbFCount
Print Satzgröße: ;%dbRecSize; Byte
Print Headergröße: ;%dbHeader; Byte
Print Letzte Änderung: ;$dbLUpdate
Anzahl% = %dbFCount
i% = 1
WhileNot i% > Anzahl%
@db(GetField, i%)
Print $dbFName,$dbFType,%dbFLen,%dbFDecs
Print
Print
Inc i%
EndWhile
@db(Close, #1)
Waitinput
Name$ = @LoadFile$(Welche Datei,*.DBF)
print Name$
@db(Open, #1,Name$)
@db(Use, #1)
Anzahl% = %dbFCount
i% = 1
WhileNot i% > Anzahl%
@db(GetField, i%)
länge%=%dbFLen
länge%= länge%*5
@set(Decimals,0)
Browse$=Browse$+$dbFName+;+$dbFName+;+str$(länge%)+;
Inc i%
EndWhile
@db(Browse, 10,10,ADRESS-TABELLE,10, Browse$ ,3)
print &dbRecCount
@db(AppendBlank)
@dbPack()
@dbClose(#1)
End
Ich habe X Profan und Windows XP Bildschirmauflösung 1280-1024 und getestet auch mit 1024-768 bei beiden Auflösungen ist der gleiche Fehler aufgetreten mir fehlen unten bei der Toolbar ein paar Pixel (siehe anhängendes Bild) das gleiche Programm auf einem Notebook mit Windows ME mit einer Auflösung von 1024-768 einwandfrei wer kann mir da helfen |
| | | Board MSI B450M BAZOOKA CPU AMD Ryzen 7 2700x 8 Core 3,7-4,2 GH 32 Gb Ram NVIDIA GeForce GTX 3060 12 GB Ram Window 11 Prof 64 Bit
Sun-Guru-Barebone CPU I7-9750H 16 GB Ram NVIDIA GeForce GTX1660TI 6 GB Ram Window 11 Hom 64 Bit
Profan 4.5 bis Xprofan 14 Ein frisch geschriebenes Programm hat meistens einen großen Fehler.Sollte man versuchen diesen großen Fehler zu beseitigen, hat man viele kleine Fehler "Grins" | 22.04.2007 ▲ |
| |
| | | | - Seite 2 - |
| | | Jojo - funktionieren tuts. Dennoch weisst auch RGH immer wieder darauf hin solche Anweisungen zu klammern. Im Prinzip hast hierbei nur Glück dass das erste Minus an der richtigen Stelle sitzt. Würdest Du z.B. Parameter 4 und 3 tauschen (Sinnhaftigkeit sei dahingestellt) würde es schon scheitern. Und das ist denk ich mal ein sehr guter Hinweis auf eine ebend falsche Syntax.
Ich persönlich setze mich ein für die Abschaffung von - und ; als Parametertrennzeichen. Einzig und alleine das , sollte hierfür nötig sein. Vielleicht bringt Roland das seinem Parser bei. |
| | | | |
| | Wilfried Friebe | Sorry ich dachte das X vor Profan genügt ich habe Xprofan 10 zum %CyCaption ich kann es jetzt zwar auslesen es ist 30 und %Cymenu = 20 aber wie verändere ich diese Werte ? so gut bin ich im programieren nicht an die sys-variablen habe ich mich bis jetzt nicht getraut :--/ |
| | | Board MSI B450M BAZOOKA CPU AMD Ryzen 7 2700x 8 Core 3,7-4,2 GH 32 Gb Ram NVIDIA GeForce GTX 3060 12 GB Ram Window 11 Prof 64 Bit
Sun-Guru-Barebone CPU I7-9750H 16 GB Ram NVIDIA GeForce GTX1660TI 6 GB Ram Window 11 Hom 64 Bit
Profan 4.5 bis Xprofan 14 Ein frisch geschriebenes Programm hat meistens einen großen Fehler.Sollte man versuchen diesen großen Fehler zu beseitigen, hat man viele kleine Fehler "Grins" | 22.04.2007 ▲ |
| |
| | | Kein Problem! Diese Werte sind nicht gedacht zum Verändern - nur nutzen sollst Du diese!
Wenn Du z.B. ein Fenster mit einem Innenbereich von 400 Pixel in Höhe möchtest dann musst Du das Fenster also mindestens mit window 0,0, x,400+%cycaption erstellen. Da das aber auch Quatsch ist weil Fensterrahmen & Co. auch addiert werden müssten kannst Du einfach hier so ne alte Funktion von mir benutzen: KompilierenMarkierenSeparieren Das geht dann so: KompilierenMarkierenSeparierenwindow 0,0 - 640,480
setinnersize 640,480
print Fensterinnenraum ist:,width(%hwnd),x,height(%hwnd),Pixel groß.
waitinput
end
proc setinnersize
parameters x%,y%
setwindowpos %Hwnd = %winleft,%wintop - ((%winright-%winleft)-(width(%hwnd)-x%)),((%winbottom-%wintop)-(height(%hwnd)-y%));0
endproc
Nach Setinnersize hat Dein HWND dann garantiert einen Anzeigebreich von 640x480 Pixeln. |
| | | | |
| | Wilfried Friebe | OK soweit so gut Normale Fenster sind kein Problem eigendlich geht es um den Befehl
@db(Browse,X,Y, S1,N1,S2,N2)
bei einer GridBox hatte ich den Fehler auch schon einmal habe durch größere x/y maße aber hinbekommen
bei @db(Browse,X,Y, S1,N1,S2,N2) geht das aber nicht ob man da etwas machen kann das ist meine eigendliche Frage
Gruß Wilfried |
| | | Board MSI B450M BAZOOKA CPU AMD Ryzen 7 2700x 8 Core 3,7-4,2 GH 32 Gb Ram NVIDIA GeForce GTX 3060 12 GB Ram Window 11 Prof 64 Bit
Sun-Guru-Barebone CPU I7-9750H 16 GB Ram NVIDIA GeForce GTX1660TI 6 GB Ram Window 11 Hom 64 Bit
Profan 4.5 bis Xprofan 14 Ein frisch geschriebenes Programm hat meistens einen großen Fehler.Sollte man versuchen diesen großen Fehler zu beseitigen, hat man viele kleine Fehler "Grins" | 22.04.2007 ▲ |
| |
| | | Ich glaube (ldr. nicht wissen) der Dialog steckt als Ressource in der Runtime. Also Reshacker besorgen und Dialog in der prfrun32.exe ändern (und in der profan.exe für den Interpretermodus). |
| | | | |
| | RGH | iF
Ich glaube (ldr. nicht wissen) der Dialog steckt als Ressource in der Runtime. Also Reshacker besorgen und Dialog in der prfrun32.exe ändern (und in der profan.exe für den Interpretermodus).
Ich fürchte, hier wird der Reshacker nicht reichen, sondern ich muß es mir auf die ToDo-Liste für die nächste XProfan-Version nehmen. Für db(Edit,...) erfolgt bereits die automatische Anpassung, für db(Browse,...) leider noch nicht.
Gruß Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 23.04.2007 ▲ |
| |
| | | Ok, und ich werd später mal versuchen diesen Dialog nachträglich zu ändern. Erstmal schauen wie man den DLG (den ich noch nie aufgerufen habe ) überhaupt zu Gesichte bekommt. |
| | | | |
| | Wilfried Friebe | Na gut Erstmal Danke jedenfalls lag es nicht an meinen beschränkten programierfähigkeiten GRINS werde mich also gedulden war nicht allzuleicht die umgewöhnung von profan 4,5 auf X Prfan 10 aber langsam gehts
Gruß Wilfried |
| | | Board MSI B450M BAZOOKA CPU AMD Ryzen 7 2700x 8 Core 3,7-4,2 GH 32 Gb Ram NVIDIA GeForce GTX 3060 12 GB Ram Window 11 Prof 64 Bit
Sun-Guru-Barebone CPU I7-9750H 16 GB Ram NVIDIA GeForce GTX1660TI 6 GB Ram Window 11 Hom 64 Bit
Profan 4.5 bis Xprofan 14 Ein frisch geschriebenes Programm hat meistens einen großen Fehler.Sollte man versuchen diesen großen Fehler zu beseitigen, hat man viele kleine Fehler "Grins" | 23.04.2007 ▲ |
| |
| | | So habs und zwar muss man nur untere Prozedur einbinden - wenn man statt dbbrowse besser _dbbrowse eingibt dann wird das Fenster auf korrekte 514x265 Pixel Innengrösse gebracht. Natürlich ist das unsauberes Schummeln!
Hierfür einfach folgende Funktion im Source platzieren: (XPSE-original-Variante! / unten die nicht-XPSE-Variante) KompilierenMarkierenSeparieren
_dbbrowse (long a,b,string c,long d,string e,long f) {
long err
string sid=str$(gettickcount)
long timer=external(user32.dll,SetTimer,0,0,250,ProcAddr(_dbbrowse_internal,0))
dbbrowse(a,b,sid,d,e,f)
_dbbrowse_internal {
long h=findwindow(sid)
string s=gettext$(h)
if (substr$(s,1, )==sid) {
external(user32.dll,KillTimer,0,timer)
settext h,c+ +substr$(s,2, )
setwindowpos h=a,b - 320,200;0
setwindowpos h=a,b - ((320-width(h))+514),((200-height(h))+265);0
} else {
err+
case (err==40) : external(user32.dll,KillTimer,0,timer)
}
}
}
Nicht-XPSE-Variante: KompilierenMarkierenSeparieren
proc _DBBROWSE
PARAMETERS A&,B&,C$,D&,E$,F&
var ERR&=0
var SID$=STR$(&GETTICKCOUNT)
var TIMER&=EXTERNAL(user32.dll,SetTimer,0,0,250,PROCADDR(_dbbrowse_internal,0))
DBBROWSE(A&,B&,SID$,D&,E$,F&)
proc _DBBROWSE_INTERNAL
var H&=FINDWINDOW(SID$)
var S$=GETTEXT$(H&)
IF (SUBSTR$(S$,1, )=SID$)
EXTERNAL(user32.dll,KillTimer,0,TIMER&)
SETTEXT H&,C$+ +SUBSTR$(S$,2, )
SETWINDOWPOS H&=A&,B& - 320,200;0
SETWINDOWPOS H&=A&,B& - ((320-WIDTH(H&))+514),((200-HEIGHT(H&))+265);0
ELSE
INC ERR&
IF (ERR&=40)
EXTERNAL(user32.dll,KillTimer,0,TIMER&)
ENDIF
ENDIF
endproc
endproc
und hier mein Testprogramm (achtung XPSE!) KompilierenMarkierenSeparierencls
Assign #1, ADRESS.STR
Rewrite #1
Print #1, NAME; C; 30; 0
Print #1, VORNAME; C; 30; 0
Print #1, STRASSE; C; 30; 0
Print #1, PLZ_ORT; C; 30; 0
Print #1, TELEFON; C; 20; 0
Print #1, GEBURT; D; 8; 0
Print #1, GEHALT; N; 10; 2
Print #1, NOTIZ; M; 10; 0
Close #1
db(Create, ADRESS.STR, ADRESS.DBF)
@dbOpen(#1,ADRESS.DBF)
@dbUse(#1)
dbCreateIndex Name+Vorname > iName
@dbIndex(iName)
_dbbrowse(100,10,Adressen,10,NAME;Name:;100,3)
@dbPack()
@dbClose(#1)
_dbbrowse (long a,b,string c,long d,string e,long f) {
long err
string sid=str$(gettickcount)
long timer=external(user32.dll,SetTimer,0,0,250,ProcAddr(_dbbrowse_internal,0))
dbbrowse(a,b,sid,d,e,f)
_dbbrowse_internal {
long h=findwindow(sid)
string s=gettext$(h)
if (substr$(s,1, )==sid) {
external(user32.dll,KillTimer,0,timer)
settext h,c+ +substr$(s,2, )
setwindowpos h=a,b - 320,200;0
setwindowpos h=a,b - ((320-width(h))+514),((200-height(h))+265);0
} else {
err+
case (err==40) : external(user32.dll,KillTimer,0,timer)
}
}
}
Und im Anhang eine lauffähige Exe. |
| | | | |
| | | Ja, ja - der iF |
| | | | |
| | Wilfried Friebe | KompilierenMarkierenSeparierendeclare anzahlspalten& ,Dateiname$ ,Spaltenname$
Declare Text$ ,Z& ,Dateiname1$ ,Dateiname2$
cls
anzahlspalten&=0
WhileNot anzahlspalten&
anzahlspalten& = @Input$(Wert eingeben:, Wieviele Spalten ?, anzahlspalten&)
EndWhile
Dateiname$ = @Input$(Namen eingeben:, Welcher Dateiname ? , Dateiname$)
Dateiname1$=Dateiname$+.STR
Assign #1, Dateiname1$
Rewrite #1
print Bitte nach ein ander den Namen des Feldes, dessen Typ,
print dessen Länge und die Anzahl der Dezimalstellen
print getrennt durch ein ;
print die Feldtypen C=Text, D=Datum, N=Zahlen, L=Ja/Nein und M=Memo-Feld
print NAME; C; 30; 0
WhileLoop anzahlspalten&
Spaltenname$ = @Input$(Namen eingeben:, Welcher Spaltenname ? , &loop)
Print #1, Spaltenname$
endwhile
Close #1
Dateiname2$=Dateiname$+.DBF
db(Create, Dateiname1$ , Dateiname2$)
Waitinput
KompilierenMarkierenSeparieren-Begin------------------------------------------------------------------
proc _DBBROWSE
PARAMETERS A&,B&,C$,D&,E$,F&
var ERR&=0
var SID$=STR$(&GETTICKCOUNT)
var TIMER&=EXTERNAL(user32.dll,SetTimer,0,0,250,PROCADDR(_dbbrowse_internal,0))
DBBROWSE(A&,B&,SID$,D&,E$,F&)
proc _DBBROWSE_INTERNAL
var H&=FINDWINDOW(SID$)
var S$=GETTEXT$(H&)
IF (SUBSTR$(S$,1, )=SID$)
EXTERNAL(user32.dll,KillTimer,0,TIMER&)
SETTEXT H&,C$+ +SUBSTR$(S$,2, )
SETWINDOWPOS H&=A&,B& - 320,200;0
SETWINDOWPOS H&=A&,B& - ((320-WIDTH(H&))+514),((200-HEIGHT(H&))+265);0
ELSE
INC ERR&
IF (ERR&=40)
EXTERNAL(user32.dll,KillTimer,0,TIMER&)
ENDIF
ENDIF
endproc
endproc
Declare Anzahl%, i%, Name$, Browse$, länge%, cy%, cy1%
Cls
Name$ = @LoadFile$(Welche Datei,*.DBF)
@db(Open, #1,Name$)
@db(Use, #1)
Anzahl% = %dbFCount
i% = 1
WhileNot i% > Anzahl%
@db(GetField, i%)
länge%=%dbFLen
länge%= länge%*5
@set(Decimals,0)
Browse$=Browse$+$dbFName+;+$dbFName+;+str$(länge%)+;
Inc i%
EndWhile
_dbbrowse (10,10,Adress-Tabelle,10, Browse$ ,3)
@db(Browse, 10,10,ADRESS-TABELLE,10, Browse$ ,3)
print &dbRecCount
@db(AppendBlank)
@dbPack()
@dbClose(#1)
End
Irgendwie gehts doch wohl nicht mit dem ersten Programm erstelle ich eine DB Datei mit dem zweiten lese ich diese datei dann aus und bearbeite sie ich habe die MUSIK.DBF Datei als MUSIK.txt im Anhang dazugetan Die EXE und die andere Datei laufen nur solange wie nur eine Spalte ist bei mehreren zeigt das Prog falsch an ist eigendlich ja auch nur ein Schönheitsfehler im zweiten Programm sind beide Befehle drin _dbbrownse und @db(brownse) und die neue Procedur |
| | | Board MSI B450M BAZOOKA CPU AMD Ryzen 7 2700x 8 Core 3,7-4,2 GH 32 Gb Ram NVIDIA GeForce GTX 3060 12 GB Ram Window 11 Prof 64 Bit
Sun-Guru-Barebone CPU I7-9750H 16 GB Ram NVIDIA GeForce GTX1660TI 6 GB Ram Window 11 Hom 64 Bit
Profan 4.5 bis Xprofan 14 Ein frisch geschriebenes Programm hat meistens einen großen Fehler.Sollte man versuchen diesen großen Fehler zu beseitigen, hat man viele kleine Fehler "Grins" | 23.04.2007 ▲ |
| |
| | | @Horst: Könntest Du es ihm zusammenführen? Ich muss nähhmlich los... |
| | | | |
|
AntwortenThemenoptionen | 10.730 Betrachtungen |
ThemeninformationenDieses Thema hat 8 Teilnehmer: |