[PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Hallo H. Brill,

mit dem direkten ändern am Code, soweit würde ich mich noch nicht nennen.
Da würde ich sagen, bin ich Welten entfernt.

In meinem Post zuvor habe ich auch etwas verdeutlichen wollen, wie ich die Liste einsetzten wollte.
Ich habe einen ersten Versuch gestartet über die letzten Tage was das angeht.

Auch verstehe ich, dass Änderungen an der GUI dann auch wieder eine ganz andere Schiene darstellt.
Im Zusammenhang mit dem Problem wälzen Pop-up-Menü bin ich zufällig auch auf die Möglichkeit
verschiedene Themes zu verwenden, gestoßen. (CEGUI und SilkTheme.zip ) das wäre dann wahrscheinlich noch eine
Level Bereich den ich später anschaue, aber ganz bestimmt noch nicht jetzt.

Auch wenn ich gerne 1000 Sachen auf einmal versuche zu bewerkstelligen.

Zum Zeitpunkt, möchte ich den Patch Maker wie ich ihn begonnen hatte, doch etwas erweitern.
Ich denke, dass der Grundsatz möglich ist, einen Offline Patch müsste mit einigen Anpassungen auch als
Online UpDate bestehen können.

Durch Eure vielen Inputs, dass Code Änderungen eher weniger geeignet sind als, dass einzelne Dateien direkt zu ersetzen.

Liebe Grüsse
Christian

H.Brill hat geschrieben: 14.12.2024 09:10 Eines wollte ich dir noch sagen :
Ich hatte es weiter oben schon mal angedeutet. Ein Patchmaker hilft nur, wenn du eigene Funtkionen
manipulieren bzw. erweitern willst. Sobald aber neue Elemente für die GUI hinzu kommen sollten, wird
das nicht mehr gehen. Der Hintergrund ist halt der, daß der Compiler feste Funktionsadressen deiner
Proceduren in der .exe erstellt. Bei den GUI - Elementen sieht das anders aus. Da vergibt Windows beim
Start deines Programmes Handles für deine Fenster und Gadgets. Und am Programmende wird halt wieder
aufgeräumt und diese Handles wieder freigegeben. Und so, wie in der .exe ist es auch fast ähnlich bei der
DLL. Zusätzlich werden bei der DLL noch die Funktionsnamen exportiert.
So kannst du mal die Funktionsnamen der Listview.dll erkunden :

Code: Alles auswählen

If OpenLibrary(0, "F:\Listview.dll")
   If ExamineLibraryFunctions(0)
     While NextLibraryFunction()
       Debug "Adresse : " + LibraryFunctionAddress()  + "   Name : " + LibraryFunctionName()
     Wend
     
   EndIf  
   CloseLibrary(0)
EndIf  
Bei mehrmaligem Aufruf wirst du feststellen, daß die Funktionsadressen immer gleich bleiben.

Solche Patches kenne ich auch von XProfan. RGH, der Autor, bietet diese als Download an, wenn er eine
Fehlerbereinigung oder Neuerungen in seinen Funktionen / Befehlen gemacht hat. Mit den festen Funktionasdressen
hat er dann seine Offsets, wo er den Dateizeiger draufsetzt und dann den neuen compilierten Bytecode reinschreiben
kann. Wenn er nun aber etwas an den GUI - Sachen ändern will, wo Windows erst zur Laufzeit die Handles liefert,
schickt er keinen Patch, sondern die neuen Versionen von Profan.exe (Interpreter) und Runtime (Prfrun32.exe).

So ist mal meine Auffassung bzw. mein Wissen dazu.
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von H.Brill »

Sorry, dass ich hier nochmal ein paar Tage zurückspringe. Ich möchte an der Stelle nur anmerken, dass ich das Runterladen im fertigen Programm per http realisiert habe. Bei FTP muss man die Zugangsdaten im Programm hinterlegen, das halte ich nicht für günstig.
Hinterlegen muß man diese Daten ja nicht unbedingt. Es genügt ja auch, wenn der Anwender deiner Software die Anmeldedaten weiß,
sei es durch vorige Übermittlung per E-Mail oder sonstige Kommunikation. Es gibt sogar Leute, die den Zugang noch per Post zuschicken.
Ist also deine Sache, wie du deinen Anwendern die Daten zukommen läßt.
Die Daten kannst du ja vor OpenFTP() vom Anwender abfragen und in Variablen speichern, die du als Parameter bei OpenFTP()
übergibst. Und ob der Anwender sie auch im Programm speichern darf kannst du entscheiden.

Und wenn du sie im Programm hinterlegen willst, hast du bei PB ja auch noch verschiedene Verschlüsselungs - Arten, die das Risiko
auch wieder etwas minimieren.

Was das Positionieren des PopupMenu betrifft, kannst du ja mit

Code: Alles auswählen

DisplayPopupMenu(#Menü, WindowID [, x, y])
genau bestimmen, wo es erscheinen soll. Ich habe es jetzt zwar noch nicht selbst in PB gemacht, aber ich würde dazu
die Mauskoordinaten mit WindowMouseX(#fenster) + WindowMouseY(#fenster) ermitteln (<> -1) und mit MouseButton() prüfen,
welche Maustaste gedrückt ist. Das Containergadget bzw. ListIcongadget ist ja im Grunde auch nichts anderes, als ein Fenster.
PB 6.10
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Hallo und einen super schönen Tag Euch allen,
Hallo H. Brill,

Vielen Dank für die Informationen dazu muss wohl auch mal schauen von wegen OpenFTP.
Momentan bin ich eher am Kapitulieren, was mein PureBasic betrifft.

Heute will keine einzige GUI sich öffnen. FormDesigner GUI geht alt wie neu.
Aber pb GUI ist Tote Hose.

Ich verstehe gerade etwas Bahnhof und hab eigentlich den ganzen Tag damit verbracht zu verstehen
was ICH falsch gemacht habe.

Unterdessen versuche ich PB Deinstallieren und NEU Installieren.

Bin mir wirklich am Hirn rauchen lassen.

Sobald ich wieder die Hälfte hinbekomme, mache ich weiter....

Herzliche Grüße
Christian
H.Brill hat geschrieben: 16.12.2024 08:44
Sorry, dass ich hier nochmal ein paar Tage zurückspringe. Ich möchte an der Stelle nur anmerken, dass ich das Runterladen im fertigen Programm per http realisiert habe. Bei FTP muss man die Zugangsdaten im Programm hinterlegen, das halte ich nicht für günstig.
Hinterlegen muß man diese Daten ja nicht unbedingt. Es genügt ja auch, wenn der Anwender deiner Software die Anmeldedaten weiß,
sei es durch vorige Übermittlung per E-Mail oder sonstige Kommunikation. Es gibt sogar Leute, die den Zugang noch per Post zuschicken.
Ist also deine Sache, wie du deinen Anwendern die Daten zukommen läßt.
Die Daten kannst du ja vor OpenFTP() vom Anwender abfragen und in Variablen speichern, die du als Parameter bei OpenFTP()
übergibst. Und ob der Anwender sie auch im Programm speichern darf kannst du entscheiden.

Und wenn du sie im Programm hinterlegen willst, hast du bei PB ja auch noch verschiedene Verschlüsselungs - Arten, die das Risiko
auch wieder etwas minimieren.

Was das Positionieren des PopupMenu betrifft, kannst du ja mit

Code: Alles auswählen

DisplayPopupMenu(#Menü, WindowID [, x, y])
genau bestimmen, wo es erscheinen soll. Ich habe es jetzt zwar noch nicht selbst in PB gemacht, aber ich würde dazu
die Mauskoordinaten mit WindowMouseX(#fenster) + WindowMouseY(#fenster) ermitteln (<> -1) und mit MouseButton() prüfen,
welche Maustaste gedrückt ist. Das Containergadget bzw. ListIcongadget ist ja im Grunde auch nichts anderes, als ein Fenster.
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von H.Brill »

Tja, mit den Formdesignern, ob jetzt PB oder andere Sprachen habe ich es von jeher nicht so.
Den Designer von PB habe ich auch noch nie benutzt. Auch muß man dann auch die Vorgaben (Ereignisschleife)
benutzen.
Da ich ja seit den Anfängen von Windows mit der Programmierei von Windows dabei bin, bevorzuge
ich immer noch die alten Methoden, wo man dann auch ein echtes Windowshandle bekommt (geht zwar
auch mit PB_Any). Das ganze Gedöns mit den Enumerationen liegt mir auch nicht. Verwende doch mal nur
eine einzige Numeration für dein Fenster, Gadets und Menü. Bei mehreren Enumerationen hast du ja auch
etliche Konstanten, die auf 0 oder 1, 2 usw. sind. Jede neue Enumeration zählt ja wieder von 0 rauf.
Bei einer einzigen Enumeration hast du wenigstens fortlaufende Zahlen und keine doppelten. Das finde ich
dann eindeutiger und ist ja Hauptsinn von Enumeration.
PB 6.10
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Hallo @all
Hallo H. Brill,

Naja, ich beginne mit dem Einrichten vom PureBasic eigentlich wieder von 0.
Aber das Problem besteht immer noch und ich habe noch nicht verstanden
wo das Problem liegt.

Das Einzige, das geht, ist die vom Editor.
Eine Kopie derselben geht NIE.

Ich habe nun wirklich den ganzen Tag versucht zu erkennen, wo habe ich einen Fehler.
Vielleicht seht Ihr einen, den ich einfach übersehe.

Ich wäre echt froh zu wissen, was ich falsch mache heute.

Hier der Link zu den Versionen von der GUI.
7zip Datei:
https://e.pcloud.link/publink/show?code ... 1oY0zG7uQy

Link zum Verzeichnis mit den Dateien:
https://e.pcloud.link/publink/show?code ... YCoRJBHjQy

Momentan stehe ich irgendwie an einer Sackgasse, obwohl das zurück auch nicht geht irgendwie.

Vielen Dank
Christian
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Hallo @all
Hallo H. Brill,

Da ich "leider" mir noch kein Standard Formular zusammen gezimmert habe.
Wäre eigentlich an der Zeit sowas zu entwerfen, bin ich am zusammen Flicken.

Und das, was der Form-Designer hergibt, ist dann im Endeffekt auch nicht das Wahre vom gelben Ei,
wenn ich eine Änderung machen ohne zu beachten, dass alles wieder gelöscht wird, ist der Frust groß.

IceDesigner finde ich ganz schön, aber die extrem komplexe Struktur wenn man dann doch wieder
etliches von Hand machen muss, ist auch da recht verwirrlich (oder heißt das anders im Deutschen).

Wie Du so schön sagst, von Hand währt am besten, aber als Anfänger hat man sich noch nicht so viel
zusammen gelegt, dass es super easy geht.

Und gerade jetzt wo irgendwie alles so nicht will wie es soll, hängt der Anfänger in den Seilen und
sucht das rettende Netz.

Nun ja, mal schauen, ob ich mit kompletter Handarbeit doch wieder zum gleichen Resultat komme
wie zuvor, nur dieses Mal nicht so flink.

Herzliche Grüße
Christian
H.Brill hat geschrieben: 16.12.2024 12:05 Tja, mit den Formdesignern, ob jetzt PB oder andere Sprachen habe ich es von jeher nicht so.
Den Designer von PB habe ich auch noch nie benutzt. Auch muß man dann auch die Vorgaben (Ereignisschleife)
benutzen.
Da ich ja seit den Anfängen von Windows mit der Programmierei von Windows dabei bin, bevorzuge
ich immer noch die alten Methoden, wo man dann auch ein echtes Windowshandle bekommt (geht zwar
auch mit PB_Any). Das ganze Gedöns mit den Enumerationen liegt mir auch nicht. Verwende doch mal nur
eine einzige Numeration für dein Fenster, Gadets und Menü. Bei mehreren Enumerationen hast du ja auch
etliche Konstanten, die auf 0 oder 1, 2 usw. sind. Jede neue Enumeration zählt ja wieder von 0 rauf.
Bei einer einzigen Enumeration hast du wenigstens fortlaufende Zahlen und keine doppelten. Das finde ich
dann eindeutiger und ist ja Hauptsinn von Enumeration.
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von H.Brill »

Was du da zusammen gezimmert hast, ist ja schon was.
Was du vergessen hast, ist die Ereignis bzw. EventSchleife und der Aufruf deiner Prozedur. Ohne diese
Eventschleife blitzt dein Fenster so schnell auf und verschwindet wieder, daß man das kaum mitbekommt.
Aslo, denke immer daran, so eine Ereignisschleife einzubauen (WaitWindowEvent). Man muß halt ungefähr wissen,
wie Windows tickt. Windows ist nunmal ein ereignisgesteuertes System, das bestimmte Messages verwaltet.
Egal, wie man es auch nennt Event, Ereignis, Messages, Nachrichten o. ä. Da ist immer das gleiche gemeint.
Ich schreibe die Hauptprocedur immer an den Anfang ohne Procedure. Du kannst sie aber auch belassen, mußt
sie aber unten auch aufrufen und anschließend deine Event/Messageverwaltung in einer Schleife ausführen.
Die folgenden Aktionen, die die Gadgets auslösen sollen, sollst du sehr wohl in Proceduren verfrachten, alleine
der Übersichtlichkeit halber.

Ich hoffe, damit kommst du schon mal weiter :

Code: Alles auswählen

Enumeration FormWindow
  #Window_0
  #Container_0
  #Text_0
  #Text_4
  #Text_6
  #Editor_0
  #Editor_5
  #Date_0
  #Container_2
  #ListIcon_0
  #MenuItem_2
  #MenuItem_3
  #MenuItem_5
  #MenuItem_6
  #MenuItem_8
  #MenuItem_10
  #MenuItem_12
  #MenuItem_13
  #MenuItem_14
  #MenuItem_16
  #Font_Window_0_0
EndEnumeration

LoadFont(#Font_Window_0_0,"Antigone Pro Light", 12)


If  OpenWindow(#Window_0, 0, 0, 750, 380, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
  CreateMenu(0, WindowID(#Window_0))
  MenuTitle("&Datei")
  MenuItem(#MenuItem_2, "&Neu")
  MenuItem(#MenuItem_3, "&Öffnen")
  MenuBar()
  MenuItem(#MenuItem_5, "&Speichern")
  MenuItem(#MenuItem_6, "Speichern &unter")
  MenuBar()
  MenuItem(#MenuItem_8, "&Beenden")
  MenuTitle("&?")
  MenuItem(#MenuItem_10, "&Hilfe")
  MenuBar()
  MenuItem(#MenuItem_12, "Anpassungen")
  MenuItem(#MenuItem_13, "Danksagung")
  MenuItem(#MenuItem_14, "Rechtliches")
  MenuBar()
  MenuItem(#MenuItem_16, "&Über")
  ContainerGadget(#Container_0, 10, 0, 720, 50, #PB_Container_Flat | #PB_Container_Raised)
  TextGadget(#Text_0, 10, 10, 70, 25, "Projekt:")
  SetGadgetFont(#Text_0, FontID(#Font_Window_0_0))
  TextGadget(#Text_4, 270, 10, 70, 25, "Version:")
  SetGadgetFont(#Text_4, FontID(#Font_Window_0_0))
  TextGadget(#Text_6, 470, 10, 60, 25, "Datum:")
  SetGadgetFont(#Text_6, FontID(#Font_Window_0_0))
  EditorGadget(#Editor_0, 80, 10, 180, 25, #PB_Editor_ReadOnly)
  SetGadgetFont(#Editor_0, FontID(#Font_Window_0_0))
  AddGadgetItem(#Editor_0, -1, "Projekt Name")
  EditorGadget(#Editor_5, 340, 10, 120, 25, #PB_Editor_ReadOnly)
  SetGadgetFont(#Editor_5, FontID(#Font_Window_0_0))
  AddGadgetItem(#Editor_5, -1, "Projekt Version")
  DateGadget(#Date_0, 540, 10, 170, 25, "")
  SetGadgetFont(#Date_0, FontID(#Font_Window_0_0))
  CloseGadgetList()
  ContainerGadget(#Container_2, 10, 70, 720, 250, #PB_Container_Flat | #PB_Container_Raised)
  ListIconGadget(#ListIcon_0, 10, 10, 700, 230, "Datei", 100, #PB_ListIcon_FullRowSelect)
  AddGadgetColumn(#ListIcon_0, 1, "Verzeichnis", 100)
  AddGadgetColumn(#ListIcon_0, 2, "Optionen", 100)
  CloseGadgetList()
  Repeat
     Event = WaitWindowEvent()
     If Event = #PB_Event_Gadget
       Select EventGadget()
           ; hier kommt die Abfrage für die Buttons usw. rein
       EndSelect
     ElseIf EventMenu()
       Select EventMenu()
         Case #MenuItem_2
               MessageRequester("Info", "Du hast NEU gewählt !", #PB_MessageRequester_Ok)
             Case #MenuItem_3
               MessageRequester("Info", "Du hast ÖFFNEN gewählt !", #PB_MessageRequester_Ok)
             Case #MenuItem_5
               MessageRequester("Info", "Du hast SPEICHERN gewählt !", #PB_MessageRequester_Ok)
             Case #MenuItem_6
               MessageRequester("Info", "Du hast SPEICHERN UNTER gewählt !", #PB_MessageRequester_Ok)
             Case #MenuItem_8
               MessageRequester("Info", "Du hast BEENDEN gewählt !", #PB_MessageRequester_Ok)
               Break  ; Ende Programmm, Ausgang mit Break aus der Schleife springen
             Case #MenuItem_10
               MessageRequester("Info", "Du hast HILFE gewählt !", #PB_MessageRequester_Ok)
             Case #MenuItem_12
               MessageRequester("Info", "Du hast ANPASSUNGEN gewählt !", #PB_MessageRequester_Ok)
             Case #MenuItem_13
               MessageRequester("Info", "Du hast DANKSAGUNG gewählt !", #PB_MessageRequester_Ok)
             Case #MenuItem_14
               MessageRequester("Info", "Du hast RECHTLICHES gewählt !", #PB_MessageRequester_Ok)
             Case #MenuItem_16
               MessageRequester("Info", "Du hast ÜBER gewählt !", #PB_MessageRequester_Ok)
      EndSelect
    EndIf  
   Until Event = #PB_Event_CloseWindow
EndIf
PB 6.10
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von H.Brill »

Vielleicht hilft dir es mit diesem kleinen Beispiel :

Code: Alles auswählen

Enumeration 
  #Window_0
  #button1
EndEnumeration

ende.l = 0

If OpenWindow(#Window_0, 0, 0, 750, 380, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
  ButtonGadget(#button1, 10, 10, 60, 30, "ENDE") 
  While ende = 0
    event.l = WaitWindowEvent()  ; hier empfängt PB die Botschaften. U. a. auch die Botschaft #PB_Event_CloseWindow (Schließen-Kreuz)
    If event = #PB_Event_Gadget  ; hier wird festgestellt, ob ein Gadget (in diesem Falle der Button) geklickt wurde
      Select EventGadget()       ; weil es ja mehrere Buttons geben kann, wird hier überprüft, welcher es war.
        Case #button1
          ende = 1 ; hier wird ein Ausgang aus der Schleife geschaffen. ende ist nicht mehr 0, also wird while ende = 0 unwahr und somit die Schleife nicht mehr durchlaufen. 
      EndSelect    
    ElseIf event = #PB_Event_CloseWindow  ; Schließen-Kreuz
       ende = 1
    EndIf
  Wend
EndIf
Wie du deine Eventschleife gestaltest, ist dir überlassen. Wichtig ist halt das WaitWindowEvent() und dessen Abfrage darin.
PB 6.10
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Hallo @all
Hallo H. Brill

Ich habe heute wirken einen Tag gebrauch um annähernd wieder am Ausgangspunkt vom Samstag
anzukommen.

Das dürfte niemals ein Chef erfahren, was ich für Zeit verjubelte und der Kunde wäre immer noch nicht befriedigt.

Aber ich habe meinen Source so gut wie möglich formatiert und strukturiert.
Eure Hinweise tragen Früchte, auch wenn ich Tod müde bin, hab ich heute extrem viel geschafft.

Das eigentliche, was ich noch nicht hinbekommen habe, ist das PopUpMenü in der ListIconView.
Das muss bis Morgen warten.

Lieber H. Brill, ich werde auch Deine Hinweise gerne anschauen.
Ich denke, Du hättest mir wieder 10 Stunden Arbeit abgenommen, mit ein zwei Hinweisen.
Ich geb zu, dieser Tag war lehrreicher als Ihr Euch denkt.

Auch wenn es nach nichts Komma nichts ausschaut.

Herzliche Grüsse
Christian

Code: Alles auswählen

;= GUI Test for the procedure createpatch.pbi and patchit.pbi
;- Top
; -----------------------------------------------------------------------------
;           Name: PM-AUPT app
;    Description: Patch Maker und Auto UpDate Tool (GUI)
;         Author: Christian & all of the PureBasic Forum
;           Date: 2024-12-16
;        Version: Beta
;     PB-Version: 6.12
;             OS: WIN 11
;         Credit:
;          Forum:
;     Created by: Standard Window
; -----------------------------------------------------------------------------
; EnableExplicit

fileEnconding = #PB_UTF8


;}>SecOneA(1)
;| == 1. Aufzählungen (Enummeration) von Controlls
;|
;| § 1.1 -- Aufliestung der benötigten Elemente der Buttons sowie vorhandener
;| Strings und Menüs für die weiterführende GUI.
;{<

;}>SecOneB(2)
;|
;| § 1.2 --  Die Dokumentantion Elemente in dieser Source werden zugleich für die
;|           externe Dokumentantions Generierung mit doxler verwendet und als ASCIIdoc
;|           resp. HTML Datei generiert.
;|           So dass ich über die HTML oder SCIIdoc File gerade eine passende Dokumentation
;|           generier kann ohne weitere bemühungen
;|
;|           REFERENZEN: (Stand 16.12.2024)
;|
;|           https://www.purebasic.fr/german/viewtopic.php?p=353121&hilit=AsciiDoc#p353121
;|           https://tajmone.github.io/doxter/
;|           https://github.com/tajmone/doxter
;|
;|
;|
;| - Enumeration Gadget
;
;- Enumeration FormGadget
Enumeration FormGadget
  #Container_0
  #Text_0
  #Text_4
  #Text_6
  #Editor_0
  #Editor_5
  #Date_0
  #Container_2
  #ListIcon_0
EndEnumeration
;{<

;}>SecOneC(3)
;|
;| § 1.3 --  Enumeration der Form Menü Elemente
;|
;- Enumeration FormMenü
Enumeration FormMenu
  #MenuItem_2
  #MenuItem_3
  #MenuItem_5
  #MenuItem_6
  #MenuItem_8
  #MenuItem_10
  #MenuItem_12
  #MenuItem_13
  #MenuItem_14
  #MenuItem_16
EndEnumeration
;{<

;}>SecOneD(4)
;|
;| § 1.4 --  Enumeration der PopUp Menü Elemente
;|
;- Enumeration PopUp Menü
Enumeration FormFont
  #PopUpMenuItem_2
  #PopUpMenuItem_3
  #PopUpMenuItem_4
  #PopUpMenuItem_5
  #PopUpMenuItem_6
EndEnumeration
;{<

;}>SecOneE(4)
;|
;| § 1.4 --  Enumeration der Font Elemente
;|
;| § 1.4.1 -- Öffnen oder Starten Font Fenster Gadget
;| § 1.4.2 -- Laden der eigentlich Schriftart
;|
;- Enumeration Form Font Gadget
Enumeration FormFont
  #Font_Window_0_0
EndEnumeration

;- Load Font
LoadFont(#Font_Window_0_0,"Antigone Pro Light", 12)
;{<

;}>SecTwoA(5)
;|
;|  == 2.     Fenster
;|
;| § 2.1 --  Öffnen des Fenster  Elemente
If  OpenWindow(0, x, y, 750, 350, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
;|
;| § 2.2. -- Erstellen des Menü Gadget
;- Create Menü
If  CreateMenu(0, WindowID(0))
;|
;| § 2.3. -- Erstellen der Menü Einträge
;- Menü Einträge aufführen
  MenuTitle("&Datei")
  MenuItem(#MenuItem_2, "&Neu")
  MenuItem(#MenuItem_3, "&Öffnen")
  MenuBar()
  MenuItem(#MenuItem_5, "&Speichern")
  MenuItem(#MenuItem_6, "Speichern &unter")
  MenuBar()
  MenuItem(#MenuItem_8, "&Beenden")
  MenuTitle("&?")
  MenuItem(#MenuItem_10, "&Hilfe")
  MenuBar()
  MenuItem(#MenuItem_12, "Anpassungen")
  MenuItem(#MenuItem_13, "Danksagung")
  MenuItem(#MenuItem_14, "Rechtliches")
  MenuBar()
  MenuItem(#MenuItem_16, "&Über")
;|
;| § 2.4. -- Erstellen des eigentlichen Fenster (Window)
;- Elemente des Fentsers
  ContainerGadget(#Container_0, 10, 0, 720, 50, #PB_Container_Flat | #PB_Container_Raised)
  TextGadget(#Text_0, 10, 10, 70, 25, "Projekt:")
  SetGadgetFont(#Text_0, FontID(#Font_Window_0_0))
  TextGadget(#Text_4, 270, 10, 70, 25, "Version:")
  SetGadgetFont(#Text_4, FontID(#Font_Window_0_0))
  TextGadget(#Text_6, 470, 10, 60, 25, "Datum:")
  SetGadgetFont(#Text_6, FontID(#Font_Window_0_0))
  EditorGadget(#Editor_0, 80, 10, 180, 25, #PB_Editor_ReadOnly)
  SetGadgetFont(#Editor_0, FontID(#Font_Window_0_0))
  AddGadgetItem(#Editor_0, -1, "Projekt Name")
  EditorGadget(#Editor_5, 340, 10, 120, 25, #PB_Editor_ReadOnly)
  SetGadgetFont(#Editor_5, FontID(#Font_Window_0_0))
  AddGadgetItem(#Editor_5, -1, "Projekt Version")
  DateGadget(#Date_0, 540, 10, 170, 25, "")
  SetGadgetFont(#Date_0, FontID(#Font_Window_0_0))
  CloseGadgetList()
  ContainerGadget(#Container_2, 10, 70, 720, 250, #PB_Container_Flat | #PB_Container_Raised)
  ListIconGadget(#ListIcon_0, 10, 10, 700, 230, "Datei", 100, #PB_ListIcon_FullRowSelect)
  AddGadgetColumn(#ListIcon_0, 1, "Verzeichnis", 100)
  AddGadgetColumn(#ListIcon_0, 2, "Optionen", 100)
  CloseGadgetList()
EndIf
;{<

;}>SecThreeA(6)
;|
;|  == 3.     Repeat Schlaufe
;|
;- Schleife
Repeat
event =  WaitWindowEvent()
Select event
;|
;| § 3.1. -- Anzeigen und Auswerten Menü
;|
;- Elemente Menü & Auswertung
    Case #PB_Event_Menu
      Select EventMenu()
        Case #MenuItem_2
        Case #MenuItem_3
        Case #MenuItem_5
        Case #MenuItem_6
        Case #MenuItem_8
        Case #MenuItem_10
        Case #MenuItem_12
        Case #MenuItem_13
        Case #MenuItem_14
        Case #MenuItem_16
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
Until  Event = #PB_Event_CloseWindow
EndIf
;{<
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Axolotl
Beiträge: 266
Registriert: 31.12.2008 16:34

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von Axolotl »

Ja, wird doch.
Kleiner Tipp: Wenn man die Konstanten (auch die Variablen) mit "Sinnvoll" benennt, dann kann man den Code einfacher nachvollziehen, auch ohne viel Kommentar. Wie immer nur meine Meinung, als Beispiel würde ich deine MenuItem Enumeration wie folgt umbenennen.

Code: Alles auswählen

Enumeration FormMenu
  #MenuItem_New           ;   #MenuItem_2
  #MenuItem_Open          ;   #MenuItem_3
  #MenuItem_Save          ;   #MenuItem_5
  #MenuItem_SaveAs        ;   #MenuItem_6
  #MenuItem_Quit          ;   #MenuItem_8
  #MenuItem_Help          ;   #MenuItem_10
  #MenuItem_Settings      ;   #MenuItem_12
  #MenuItem_Credits       ;   #MenuItem_13
  #MenuItem_Legal         ;   #MenuItem_14
  #MenuItem_About         ;   #MenuItem_16
EndEnumeration 
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Antworten