Forum | | | | - Seite 1 - |
| liveFamilie | Hallo,
ich verzweifle seit ein paar Tagen an folgendem Problem. Habe mit dem DialogboxDesigner einen Dialog kreiert. In diesem Fenster habe ich mit startpaint, Usefont und Drawtext - Text in dem Dialogfenster erzeugt. Bei Ausführen mit dem Interpretermodus im Editor wird alles schön angezeigt. Erzeuge ich eine .exe werden die oberen 3 bis 5 Zeilen geschluckt und nicht angezeigt.
Weis jemand einen RAT ?
Gruß Toni |
| | | "Profan das Besondere" was auch in einem gewissen Alter noch Spass macht und Fit hält. | 05.05.2012 ▲ |
| |
| | « Dieser Beitrag wurde als Lösung gekennzeichnet. » | | Andreas Miethe
| Hallo Toni,
noch eins zum Abfragen ob das Programm schon läuft. Das ist nicht optimal von Dir gelöst. Ich kann es mehrmals starten, solange ich die Messagebox nicht wegklicke.
Hier mal ein Tip wie es besser geht. Ab XProfan8
'##############################################
'# Autor : ampsoft (Andreas Miethe) #
'# Datum : 06.05.2012 #
'# Thema : nur eine Instanz #
'# XProfan-Version : ab XProfan 8 #
'##############################################
$H Windows.ph
$H Messages.ph
Proc IsProgRunning
'FileMapping-Objekt anlegen
Declare hMap&,FirstProg&
'Speicherbereich anlegen
hMap& = ~CreateFileMapping(-1,0,~PAGE_READWRITE,0,4,"{D27FA9ED-55E4-4588-A10B-E4165BB37ED7}")
'Zeiger auf Speicherbreich
MemPointer& = ~MapViewOfFile(hMap&,$000F001F,0,0,0)
'Fenster-Handle der ersten Instanz ermitteln
FirstProg& = Long(MemPointer&,0)
'Ist das Fenster vorhanden, dann
IfNot ~IsWindow(FirstProg&) = 0
'Wenn Fenster verkleinert ist
If ~IsIconic(FirstProg&)
'Fenster vergrössern
SendMessage(FirstProg&,~WM_SYSCOMMAND,~SC_RESTORE,0)
EndIf
'Fenster in den Vordergrung
~SetForegroundWindow(FirstProg&)
'Speicherbereich freigeben
~UnmapViewOfFile(MemPointer&)
~CloseHandle(MemPointer&)
'Programm beenden
End
EndIf
EndProc
Declare MemPointer&,Ende&
'Überprüfung ob Programm schon läuft
IsProgRunning()
Windowstyle 539
CLS
'Handle des Haupt-Fensters im Speicherbereich ablegen
Long MemPointer&,0 = %hWnd
Ende& = 0
WhileNot Ende&
WaitInput
If %Key = 2'Close_Button.
'Speicherbereich freigeben
~UnmapViewOfFile(MemPointer&)
~CloseHandle(MemPointer&)
Ende& = 1
EndIf
EndWhile
end
|
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 06.05.2012 ▲ |
| | |
| | Jörg Sellmeyer | Am besten immer die Profanversion mit angeben und einen lauffähigen Code mitposten, sonst können wir nur raten, was das Problem ist. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.05.2012 ▲ |
| |
| | liveFamilie | Hallo Jörg,
also ich arbeite mit Profan 9.1 auf Vista und Win 7, auf beiden das gleiche Problem.
Ich versuche mal ein Bild mit hochzuladen, damit man den Unterschied sieht.
'----- Beginn Ahnenblatt portable Anwender-Erweiterung -----
'-----
'----- programmiert in XProfan V9.1 -----
'----- Freeware, Vollversion mit Compiler -----
'-----
'----- Programm Variabeln festlegen -----
'----- Programmverzeichnis festlegen (portable) -----
Declare Programm$
Programm$ = GetDir$("@")
'----- Programm ini-Pfad festlegen -----
Declare Progini$
Progini$ = Programm$+"\\Ahnblatt.ini"
'----- Programm ini auslesen und auf Variablen festlegen -----
'----- Ordnerpfade festlegen -----
Proc ABOainil
'----- AB = Ahnenblatt, O = Ordner, a = aus, ini = Ahnblatt.ini, l = lesen
Declare Familien$, Suchbegriffe$, Ausgaben$, Bilder$, Tafelbilder$
Declare LastFileName$
Familien$ = (@ReadIni$ (Progini$, "Dateien", "Familien"))
Suchbegriffe$ = (@ReadIni$ (Progini$, "Dateien", "Suchbegriffe"))
Ausgaben$ = (@ReadIni$ (Progini$, "Dateien", "Ausgaben"))
Bilder$ = (@ReadIni$ (Progini$, "Dateien", "Bilder"))
Tafelbilder$ = (@ReadIni$ (Progini$, "Dateien", "Tafelbilder"))
LastFileName$ = (@ReadIni$ (Progini$, "Allgemein", "LastFileName"))
EndProc
'----- Programm ini auslesen und auf Variablen festlegen : Ende -----
'----- Ordner in ini-Datei schreiben -----
Proc OWriteini
Declare Familien$, Suchbegriffe$, Ausgaben$, Bilder$, Tafelbilder$
Declare LastFileName$
ABOainil
WriteIni Progini$,"Dateien","Familien"=Programm$+"\\"
WriteIni Progini$,"Dateien","Suchbegriffe"=Programm$+"\\"
WriteIni Progini$,"Dateien","Ausgaben"=Programm$+"\\"
WriteIni Progini$,"Dateien","Bilder"=Programm$+"\\"
WriteIni Progini$,"Dateien","Tafelbilder"=Programm$+"\\Tafelpics"
EndProc
'----- Ordner in ini-Datei anpassen -----
Proc AWriteini
Declare Familien$, Suchbegriffe$, Ausgaben$, Bilder$, Tafelbilder$
Declare LastFileName$
ABOainil
WriteIni Progini$,"Dateien","Familien"=text$+@Mid$(Familien$,4,255)
WriteIni Progini$,"Dateien","Suchbegriffe"=text$+@Mid$(Suchbegriffe$,4,255)
WriteIni Progini$,"Dateien","Ausgaben"=text$+@Mid$(Ausgaben$,4,255)
WriteIni Progini$,"Dateien","Bilder"=text$+@Mid$(Bilder$,4,255)
WriteIni Progini$,"Dateien","Tafelbilder"=text$+@Mid$(Tafelbilder$,4,255)+"\\Tafelpics"
EndProc
'----- Ordner in ini-Datei anpassen -----
Proc ADeleteini
fehlt noch
EndProc
'----- Unterprogramme und Variablen festlegen -----
Declare FensterTitel$
FensterTitel$ = "Ahnenblatt portable Anwender-Erweiterung V1.0"
Declare ProgrammVersion$, Programmini$
ProgrammVersion$ = "AhnenblattPortable.exe"
Programmini$ = "Ahnblatt.ini"
Declare text$
text$=Left$(GetDir$("@"),3)
Declare Ende%
Ende%=0
'----- Programm Ende festlegen -----
Proc Beenden
Ende%=1
If Ende% = 1
End
EndIf
EndProc
'----- Mehrfachstart verhindern -----
Proc einmalStart
if @Gt(FindWindow(FensterTitel$),0)
messagebox("Dieses Programm darf nur einmal gestartet werden !","F E H L E R M E L D U N G",16)
end
endif
EndProc
'----- Ordner und Programmdateien auf Vorhanden sein überprüfen -----
'----- prüft ob eine Datei oder Verzeichnis existiert
Def PathFileExists(1) ! "shlwapi","PathFileExistsA"
Proc PFExists
parameters OFile$
return PathFileExists(addr(OFile$))
EndProc
'----- Programmdateien abfragen -----
Proc ABPrüfen
Declare Aini%, Aexe%
Aini% = PFExists(Programmini$)," "
Aexe% = PFExists(ProgrammVersion$)," "
If Aini% + Aexe% = 0
@MessageBox("!!! AhnenblattPortable.exe und Ahnblatt.ini !!!\n\nDateien fehlen im Programmverzeichnis.\nBitte den Originalzustand wieder herstellen.\nProgramm wird beendet.","F E H L E R M E L D U N G",64)
Beenden
elseif Aexe% = 0
@MessageBox("!!! AhnenblattPortable.exe !!!\n\nDatei fehlt im Programmverzeichnis.\nBitte den Originalzustand wieder herstellen.\nProgramm wird beendet.","F E H L E R M E L D U N G",64)
Beenden
elseif Aini% = 0
@MessageBox("!!! Ahnblatt.ini !!!\n\nDatei fehlt im Programmverzeichnis.\nBitte den Originalzustand wieder herstellen.\nProgramm wird beendet.","F E H L E R M E L D U N G",64)
Beenden
EndIf
EndProc
'----- Ahnenblatt abfragen -----
Proc ABabfrage
If @Gt(FindWindow("Ahnenblatt 2"),0)
messagebox("!!! Ahnenblatt ist aktiv !!!\n\nBitte Ahnenblatt beenden und dieses Programm neu starten.\nProgramm wird beendet."," F E H L E R M E L D U N G",16)
Beenden
endif
EndProc
Proc ABiniPrüfen
Declare Familien%, Familiens$
Familiens$ = (@ReadIni$ (Progini$, "Dateien", "Familien"))
Familien% = PFExists(Familiens$)," "
If Familien% = 0
@MessageBox("!!! Achtung !!!\n\nEs sind noch keine Verzeichnisse in der ini-Datei hinterlegt.\n\nSiehe unter Hilfe nach.","F E H L E R M E L D U N G",64)
EndIf
EndProc
'Dialogfenster Ahnenblatt portable Anwender-Erweiterung aufrufen
Proc Dialog_Fenster
Declare DialogHandle&,Dialogtaste%,DialogX%,DialogY%,DialogB%,DialogH%,ButtonX%,ButtonY%,ButtonB%,ButtonA%
Declare Button1&,Button2&,Button3&,Button4&,Button5&,Button6&
'Dialogfenster installieren
DialogB% = 900'---Dialogbreite
DialogH% = 400'---Dialoghöhe
DialogX% = (%WinLeft+((%WinRight-%WinLeft)/2))-(DialogB%/2)'---Dialogposition X
DialogY% = (%WinTop+((%WinBottom-%WinTop)/2))-(DialogH%/2)'----Dialogposition Y
'DialogHandle& = Create("Dialog",%hWnd,FensterTitel$,DialogX%,DialogY%,DialogB%,DialogH%)
DialogHandle& = create("dialog", %hWnd, FensterTitel$, ((%maxx - DialogB%)/2),((%maxy - DialogH%)/2),DialogB%,DialogH%)
SetStyle DialogHandle&,GetStyle(DialogHandle&)-$80000'---SystemX aus
'Bildschirmausgabe
Ausgabe
'Buttons installieren
ButtonX% = (DialogB%/2)-2'----Mitte des Dialogfensters. Daraus wird die Spaltenposition errechnet
ButtonY% = DialogH%-60'-------Position der Zeile für die Buttons
ButtonB% = 140'----------------Buttonbreite
ButtonA% = 5'-----------------Buttonabstand
ButtonX% = ButtonX%-(ButtonA%/2)-(ButtonA%*2)-(ButtonB%*3)
Button1& = Create("Button",DialogHandle&,"Werte: keine",ButtonX%,ButtonY%,ButtonB%,25)
ButtonX% = ButtonX%+ButtonB%+ButtonA%
Button2& = Create("Button",DialogHandle&,"Werte: Standard",ButtonX%,ButtonY%,ButtonB%,25)
ButtonX% = ButtonX%+ButtonB%+ButtonA%
Button3& = Create("Button",DialogHandle&,"Werte: ändern",ButtonX%,ButtonY%,ButtonB%,25)
ButtonX% = ButtonX%+ButtonB%+ButtonA%
Button4& = Create("Button",DialogHandle&,"Ahnenblatt starten",ButtonX%,ButtonY%,ButtonB%,25)
ButtonX% = ButtonX%+ButtonB%+ButtonA%
Button5& = Create("Button",DialogHandle&,"Programm beenden",ButtonX%,ButtonY%,ButtonB%,25)
ButtonX% = ButtonX%+ButtonB%+ButtonA%
Button6& = Create("Button",DialogHandle&,"Hilfe",ButtonX%,ButtonY%,ButtonB%,25)
'Maus und Tastatur abfragen
Dialogtaste% = 0
WhileNot Dialogtaste%
Waitinput
If Clicked(Button1&)
Dialogtaste% = 1
ElseIf Clicked(Button2&)
Dialogtaste% = 2
ElseIf Clicked(Button3&)
Dialogtaste% = 3
ElseIf Clicked(Button4&)
Dialogtaste% = 4
ElseIf Clicked(Button5&)
Dialogtaste% = 5
ElseIf Clicked(Button6&)
Dialogtaste% = 6
EndIf
EndWhile
'Buttons auswerten
If Dialogtaste% = 1'Button 1 gedrückt Werte: keine
ADeleteini
ElseIf Dialogtaste% = 2'Button 2 gedrückt Werte: Standard
OWriteini
ElseIf Dialogtaste% = 3'Button 3 gedrückt Werte: ändern
AWriteini
ElseIf Dialogtaste% = 4'Button 4 gedrückt Ahnenblatt starten
WinExec("AhnenblattPortable.exe",1)
Beenden
ElseIf Dialogtaste% = 5'Button 5 gedrückt Programm beenden
Beenden
ElseIf Dialogtaste% = 6'Button 6 gedrückt Hilfe
'Button 6 gedrückt Hilfe
EndIf
DestroyWindow(DialogHandle&)
EndProc
'----- Fenster Ausgabe -----
Proc Ausgabe
Declare AFamilien$, ASuchbegriffe$, AAusgaben$, ABilder$, ATafelbilder$
Declare ALastFileName$
AFamilien$ = (@ReadIni$ (Progini$, "Dateien", "Familien"))
ASuchbegriffe$ = (@ReadIni$ (Progini$, "Dateien", "Suchbegriffe"))
AAusgaben$ = (@ReadIni$ (Progini$, "Dateien", "Ausgaben"))
ABilder$ = (@ReadIni$ (Progini$, "Dateien", "Bilder"))
ATafelbilder$ = (@ReadIni$ (Progini$, "Dateien", "Tafelbilder"))
ALastFileName$ = (@ReadIni$ (Progini$, "Allgemein", "LastFileName"))
StartPaint DialogHandle&
UseFont "ARIAL", 24, 0, 1, 0, 1
DrawText 50, 10, "Ahnenblatt portable - Erweiterung"
UseFont "ARIAL", 16, 0, 1, 0, 0
DrawText 50, 40, "Nur die Laufwerkszuordnung der Dateien ändern."
UseFont "ARIAL", 14, 0, 1, 0, 1
DrawText 50, 90, "aktueller Laufwerksbuchstabe : "
UseFont "ARIAL", 24, 0, 1, 0, 0
DrawText 250,80, text$
UseFont "ARIAL", 14, 0, 1, 0, 1
DrawText 50, 110, "Ordner"
UseFont "ARIAL", 14, 0, 0, 0, 0
DrawText 50, 130, "Familien : "
UseFont "ARIAL", 14, 0, 1, 0, 0
DrawText 200, 130, AFamilien$
UseFont "ARIAL", 14, 0, 0, 0, 0
DrawText 50, 150, "Suchbegriffe : "
UseFont "ARIAL", 14, 0, 1, 0, 0
DrawText 200, 150, ASuchbegriffe$
UseFont "ARIAL", 14, 0, 0, 0, 0
DrawText 50, 170, "Ausgaben : "
UseFont "ARIAL", 14, 0, 1, 0, 0
DrawText 200, 170, AAusgaben$
UseFont "ARIAL", 14, 0, 0, 0, 0
DrawText 50, 190, "Bilder : "
UseFont "ARIAL", 14, 0, 1, 0, 0
DrawText 200, 190, ABilder$
UseFont "ARIAL", 14, 0, 0, 0, 0
DrawText 50, 210, "Tafelbilder : "
UseFont "ARIAL", 14, 0, 1, 0, 0
DrawText 200, 210, ATafelbilder$
UseFont "ARIAL", 14, 0, 1, 0, 1
DrawText 50, 230, "Datei"
UseFont "ARIAL", 14, 0, 0, 0, 0
DrawText 50, 250, "letzte geöffnete Datei : "
UseFont "ARIAL", 14, 0, 1, 0, 0
DrawText 200, 250, ALastFileName$
EndPaint
EndProc
'--------------------------
'----- Haupt-Programm -----
'--------------------------
einmalStart
ABPrüfen
ABabfrage
ABiniprüfen
Clear Ende%
WhileNot Ende%
If Ende% = 0
Dialog_Fenster
EndIf
EndWhile
'----- Ende -----
End
nicht über den Code meckern, bin noch lange nicht damit fertig. Ich hoffe das hilft.
Gruß Toni |
| | | "Profan das Besondere" was auch in einem gewissen Alter noch Spass macht und Fit hält. | 05.05.2012 ▲ |
| |
| | Jörg Sellmeyer | Tja, das ist nett gemeint aber leider bekomme ich außer einer Fehlermeldung über fehlende Dateien nix zu sehen. Reduzier doch mal den Code auf das nötigste. Vielleicht findet sich der Fehler dann ja schon. Es kann ja auch sein, dass nicht alles aus Deinen Inidateien ausgelesen wird, wenn das Programm als Exe startet. Vielleicht wird im falschen Pfad nach irgendwas gesucht. So ist die Fehlersuche für jemand Außenstehenden jedenfalls nicht ohne weiteres möglich.
Edit: Bei mir sieht beides wie im Bild aus. Entweder ein Vista-/W7-Problem oder es wird was nicht richtig ausgelesen.
|
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.05.2012 ▲ |
| |
| | liveFamilie | Hallo Jörg, das was ich da Versuche zu Produzieren ist folgendes : Aus einem Prog das nicht von mir stammt, Versuche ich Werte aus der ini zu lesen und dann den Laufwerksbuchstaben zu ändern, mit kleinen Sicherheiten, da dieses nicht nur für mich ist sondern auch für Bekannte die sich nicht so gut mit dem PC auskennen. Eine dieser Sicherheiten ist die Abfrage ob die Progs vorhanden sind. Man kann also entweder im Code das ' davor setzen oder zwei Dateien erzeugen mit den entsprechenden Namen. Ich habe mal den Code mit allem was dazu gehört gezippt und versuche jetzt mal die zip-Datei hier hochzuladen. Denn nur so wie der Code jetzt ist habe ich diesen Fehler, veränderungen führen dazu das er mal da ist und mal wieder weg ist. Wenn ich die .exe (die in der zip Datei drin ist anklicke erscheint der Fehler), hoffentlich bei euch auch, wenn ja klickt einfach mal weiter auf den Button Hilfe. Dei Meldung die erscheint einfach bestätigen. Wenn nicht muss irgendetwas an meinen beiden Systemen "krum" sein. Es kann auch nicht mit dem auslesen der ini zu tun haben, da der Text der unter Proc Ausgabe steht nicht erscheint. Hoffentlich kommst du jetzt damit klar und ich weis ob es ein fehler in meinem Prog ist oder an meinem System.
Gruß Toni |
| | | XProfan 9"Profan das Besondere" was auch in einem gewissen Alter noch Spass macht und Fit hält. | 06.05.2012 ▲ |
| |
| | Andreas Miethe
| Stell das Haupt-Programm um, dann sollte es gehen Beachte was zwischen NEUSTART und NEUEND steht
|
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 06.05.2012 ▲ |
| |
| | liveFamilie | Hallo Andreas,
Vorschlag ist gut aber hat einen Nachteil, den ich nicht möchte.
Nach Auswahl eines Buttons beendet/schließt sich das Programm. Bei meiner Version wird/soll das DialogFenster neuaufgebaut werden mit den neuen Einträgen und erst bei Button Ahnenblatt starten oder Programm beenden soll es geschlossen werden. Daher das einsetzen des DialogFensters in die Schleife.
Toni |
| | | XProfan 9"Profan das Besondere" was auch in einem gewissen Alter noch Spass macht und Fit hält. | 06.05.2012 ▲ |
| |
| | Andreas Miethe
| Hallo Toni,
noch eins zum Abfragen ob das Programm schon läuft. Das ist nicht optimal von Dir gelöst. Ich kann es mehrmals starten, solange ich die Messagebox nicht wegklicke.
Hier mal ein Tip wie es besser geht. Ab XProfan8
'##############################################
'# Autor : ampsoft (Andreas Miethe) #
'# Datum : 06.05.2012 #
'# Thema : nur eine Instanz #
'# XProfan-Version : ab XProfan 8 #
'##############################################
$H Windows.ph
$H Messages.ph
Proc IsProgRunning
'FileMapping-Objekt anlegen
Declare hMap&,FirstProg&
'Speicherbereich anlegen
hMap& = ~CreateFileMapping(-1,0,~PAGE_READWRITE,0,4,"{D27FA9ED-55E4-4588-A10B-E4165BB37ED7}")
'Zeiger auf Speicherbreich
MemPointer& = ~MapViewOfFile(hMap&,$000F001F,0,0,0)
'Fenster-Handle der ersten Instanz ermitteln
FirstProg& = Long(MemPointer&,0)
'Ist das Fenster vorhanden, dann
IfNot ~IsWindow(FirstProg&) = 0
'Wenn Fenster verkleinert ist
If ~IsIconic(FirstProg&)
'Fenster vergrössern
SendMessage(FirstProg&,~WM_SYSCOMMAND,~SC_RESTORE,0)
EndIf
'Fenster in den Vordergrung
~SetForegroundWindow(FirstProg&)
'Speicherbereich freigeben
~UnmapViewOfFile(MemPointer&)
~CloseHandle(MemPointer&)
'Programm beenden
End
EndIf
EndProc
Declare MemPointer&,Ende&
'Überprüfung ob Programm schon läuft
IsProgRunning()
Windowstyle 539
CLS
'Handle des Haupt-Fensters im Speicherbereich ablegen
Long MemPointer&,0 = %hWnd
Ende& = 0
WhileNot Ende&
WaitInput
If %Key = 2'Close_Button.
'Speicherbereich freigeben
~UnmapViewOfFile(MemPointer&)
~CloseHandle(MemPointer&)
Ende& = 1
EndIf
EndWhile
end
|
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 06.05.2012 ▲ |
| |
| | liveFamilie | Hallo Andreas, da die für die es bestimmt ist nicht so professionell sind reicht diese kleine Brücke der Abfrage aus. Aber ich werde mir deinen Vorschlag mal zu Herzen nehmen und mal schauen ob diese Abfrage ob das Prog schon läuft für mich nachvollziehbar und umsetzbar ist.
Das obige Problem hat sich irgendwie bei der weiteren Programmierung von selbst gelöst. Keine Ahnung wie aber es ist jetzt i.O. Daher sehe ich das Thema als erledigt an.
Toni |
| | | XProfan 9"Profan das Besondere" was auch in einem gewissen Alter noch Spass macht und Fit hält. | 19.05.2012 ▲ |
| |
|
AntwortenThemenoptionen | 13.270 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |