Verwendung von PB mit KI - und Frage zu WindowEvent

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kurzer
Beiträge: 1621
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von Kurzer »

Hallo stab,

schöne Frage, die mich auch seit einigen Monaten beschäftigt. Und auch ich gehöre zum älteren Semester, auch wenn meine Hardware nicht so heftig nostalgisch ist wie deine. Programmierst du im Ernst auf und für einen 386er Computer mit Windows 3.1?

Jedenfalls kann ich zu dem Thema auch etwas beitragen. Ich bin kein KI-User der ersten Stunde, da musste erst der frühe ChatGPT-3.5-Hype in den Medien die Runde machen, bevor ich überhaupt etwas von dem Thema mitbekommen habe. Und aktiv damit beschäftigt habe ich mich auch erst recht spät. Ich denke, es war irgendwann im Jahr 2024.

Mittlerweile experimentiere ich aber schon sehr oft mit ChatGPT und der Programmierung in PureBasic. Allerdings nicht nur, denn da diese Technologie und die daraus erwachsenen Möglichkeiten (für mich) noch so extrem neu sind, muss ich selbst erstmal lernen, wofür man dieses Werkzeug sinnvoll einsetzen kann und wie man es am besten anstellt, um es effektiv zu nutzen. Später mehr dazu, du hattest ja primär nach der KI-gestützten Programmierung in PureBasic gefragt.

Inzwischen habe ich mit verschiedenen PB-Projekten und ChatGPT experimentiert, und ich bin mir noch immer nicht ganz sicher, ob man speziell im Fall von PureBasic mit einer KI so gut beraten ist. Naja, zumindest teilweise, später mehr dazu. Im Übrigen kann ich nur über meine Erfahrungen mit ChatGPT sprechen, da ich mittlerweile bei OpenAI ein zahlender "Plus-Abo"-Kunde bin. Andere KIs habe ich lediglich in der Free-Version getestet und bin damit nicht warm geworden.

Ich bin damals bei ChatGPT hängengeblieben, weil ich mich sehr an den Sprachmodus gewöhnt hatte (nicht an den später eingeführten fortgeschrittenen Sprachmodus, der eine Katastrophe ist!). Da habe ich noch gar nicht an Programmierung mit der KI gedacht, und seinerzeit war ich auch nicht sehr aktiv beim Programmieren. Ich hatte eine längere PureBasic-Pause eingelegt. Aber dafür war ich im für mich völlig faszinierten "Erkundungs- und Ausprobiermodus".

Man konnte z. B. sein Smartphone mit ins Warenlager nehmen und (nach vorheriger Instruktion der KI) bei einer Inventur alle Artikel und Mengen der KI ansagen und sich später eine Excel-Liste davon ausgeben lassen. Was für eine krasse Scheisse ist das denn?! Also ja, ich war zu der Zeit mega geflasht von dieser Technologie. :-D

Nun aber zum Thema PureBasic und KI:
Ich bekomme die genauen Zeitpunkte nicht mehr rekapituliert, aber ich erzähle es chronologisch.

Angefangen hat alles mit der kostenlosen Version von ChatGPT. Ich war anfangs kein zahlender Plus-Kunde bei OpenAI, sondern habe nur die Free-Version genutzt. Das war in mehrfacher Hinsicht limitiert. Die Antworten kamen deutlich langsamer, und man konnte auch nicht auf die leistungsstärkeren Modelle zugreifen. Trotzdem war es faszinierend, dass man einer Maschine einfache Beschreibungen geben und dafür in Sekunden (mehr oder weniger) funktionierenden Code erhalten konnte. Das war so ein Quantensprung, dass ich da echt gehypt war. :-D

Damals lief alles noch auf meinem alten Windows-7-Rechner. Und aus diesem Grund lief dort auch nur ein alter Browser, da die neuesten Builds nicht mehr für Windows 7 gebaut wurden. Leider funktionierten in dem Browser einige Features nicht, wie z. B. die Möglichkeit, Dateien in ein ChatGPT-Projekt hochzuladen.

Ich musste alles manuell per Copy-Paste zwischen Chatfenster und PureBasic-IDE hin- und herschieben, also recht umständlich. Die Codequalität war am Anfang ehrlich gesagt auch eher durchwachsen: Die KI hat z. B. neue PureBasic-Befehle erfunden, Pointer falsch behandelt, Parameter vertauscht und auf jeden Fall immer viel zu komplizierte Lösungen produziert und meistens war der Code nicht kompilierbar.

PureBasic-Code aus der KI ist meiner Erfahrung nach fast immer aufgebläht und mindestens doppelt so groß, wie er sein müsste (zumindest, wenn die KI meine „Programmierinstruktionen“ beachten soll). Trotzdem war das spannend, weil die Maschine wenigstens irgendetwas verstand, und es war faszinierend, dass man Anforderungen und Funktionalitäten mit Worten beschreiben konnte und in Sekunden einen Vorschlag bekam. Später habe ich mit der KI dann Workflows entwickelt, die die Codequalität und den Fortschritt verbessern sollten. Wir haben Projektdokumentationen erstellt, in denen die Anforderungen beschrieben wurden, Mockups von Oberflächen erstellt, Datenmodelle kreiert usw. also alles, was der KI bei der Umsetzung klare Richtlinien vorgibt. Aber auch da muss man den richtigen "Sweet Point" finden, damit sie sich nicht in Details verrennt oder übers Ziel hinausschießt. Man steckt also in jedem Fall eine Menge Zeit rein, um etwas brauchbares zu bekommen.

Dann kam meine "AGENTS.md"-Datei.
Ich habe irgendwann angefangen, eine technische Anweisungsdatei zu schreiben, die genau festlegt, wie Code bei mir auszusehen hat, wie Variablen benannt werden, wie Prozeduren aufgebaut sind, wie Kommentare und Dateinamen aussehen sollen usw. – also mein Programmierstil in Regeln gegossen. Diese Datei hat sich mit der Zeit immer weiterentwickelt und ist mittlerweile über 40 KB groß (Spoiler: was definitiv viel zu groß ist).

Die Idee war, dass die KI anhand dieser Datei lernt, Code in meinem Stil zu schreiben. Das hat teilweise funktioniert, aber man darf nicht erwarten, dass das Modell alle Anweisungen gleichzeitig beachtet. Selbst GPT-5 ist damit überfordert. Ich bin inzwischen dazu übergegangen, schrittweise zu arbeiten. Also erst eine Art "freestyle-Grundgerüst" erstellen zu lassen und dann gezielt einzelne Aspekte überarbeiten lassen (z. B. Variablennamen anpassen, Kommentare ergänzen oder eine bestimmte Prozedur optimieren).

Für die Interaktion mit der KI habe ich anfangs ein kleines Tool entwickelt, das den ständigen Copy-Paste-Prozess zwischen ChatGPT und IDE erleichtern sollte. Es konnte Sicherheitskopien anlegen und Quellcodedateien automatisch austauschen, sodass die PureBasic-IDE sie sofort neu einliest sowie Projektdateien in die Zwischenablage kopieren. Fertig geworden ist das Programm nie, weil ich dann auf Windows 11 umgestiegen bin und endlich einen aktuellen Browser zur Verfügung hatte, mit dem ich Projektdateien einbinden konnte, aber die Idee mit dem eigenen Tool war ein netter Zwischenschritt.

Das Programmieren in PureBasic war aber immer auf die eine oder andere Weise nervig. Die KI war dann doch weit entfernt von den angeblich tollen Codingskills, die ihr in diversen KI-News-Kanälen auf YouTube attestiert wurden. Das Coden dauerte immer länger als sonst, wenn man die KI eingebunden hat. Insofern kann ich das, was Stargate oben schreibt, bestätigen.

Ein großer Motivationsschub kam für mich mit der nutzung von WinAPI in den Programmen.
In diesem Bereich kennt sich die KI definitiv besser aus als in der PureBasic-Programmierung. Funktionen der Windows-API sind hervorragend dokumentiert und im Trainingsmaterial der KI vermutlich haufenweise vertreten. Damit kann man plötzlich Dinge umsetzen, von denen man eigentlich keine Ahnung oder keine Erfahrung hat.

Früher habe ich solche Sachen meist aus Forum-Beispielen übernommen. Heute lasse ich mir direkt erklären, ob und welche API-Funktionen für ein bestimmtes Vorhaben nötig oder verfügbar sind und wie der Code in PureBasic aussehen muss. Das spart enorm viel Zeit (im Vergleich dazu, wenn man sich diese Infos alle selbst besorgen und die Zusammenhänge lernen müsste) und macht die Programmierung wieder spannend, weil man sich in Bereiche vorwagen kann, die man vorher kaum angerührt hätte.

Seit der Ankündigung der OpenAI-Codex-Erweiterung für Visual Studio Code (bzw. VSCodium, einem Code-Editor) hat sich mein Workflow nochmal stark verändert. Da ich ja mittlerweile zahlender OpenAI-Kunde war, konnte ich die Codex-Erweiterung nutzen.

Ich nutze die portable Version VSCodium (ein Fork von Visual Studio Code, komplett ohne Microsoft-Telemetrie) und habe dort die experimentelle Codex-Erweiterung eingebunden. Damit arbeitet man wesentlich angenehmer: kein Hin- und Herkopieren, kein Hochladen bestimmter Projektdateien, sondern Codex hat direkten Zugriff auf alle Projektdateien und kann diese eigenständig lesen und editieren, direkt im Editor. Selbst wenn ein Projekt aus mehreren Dateien besteht, kommt Codex damit klar (unter Windows noch mit ein paar Einschränkungen und Fehlern, weil das Plugin wohl ursprünglich für Linux entwickelt wurde).

Im Gegensatz zu früher ist der Code, den Codex produziert, meist etwas sauberer und lauffähiger. Man merkt, dass die KI hier intensiver denkt und auf Coding ausgelegt ist. ChatGPT habe ich dabei parallel im Browser für den gesamten Setup- und Erklärungsprozess von VSCodium genutzt. Also von der Plugin-Installation bis zu den kleinen Details im Editor-Verhalten. In dem Bereich liefert ChatGPT definitiv 100 % bessere Ergebnisse. Es fühlt sich wirklich an, als würde man mit einem erfahrenen Kollegen sprechen, der schon jahrelang mit diesem Editor gearbeitet hat.

Neben der eigentlichen Programmierung setze ich KI inzwischen aber auch ganz anders ein.
Zum Beispiel für Dokumentation: Ich kann einfach per Spracheingabe meine Gedanken oder Abläufe erklären, und die KI macht daraus einen sauberen Textentwurf. Das funktioniert hervorragend, gerade wenn man kein Zehnfingerschreiber ist.
Ich lasse mir auch fremden PureBasic-Code analysieren. Einfach reinkopieren, und in Sekunden bekomme ich eine Zusammenfassung, was das Programm macht und wie es funktioniert.
Oder wie jetzt gerade: Ich spreche diesen Text während eines Spaziergangs ins Smartphone, diskutiere mit der KI über die Struktur und fasse meine Ideen stichpunktartig zusammen. Später am Rechner kann ich daraus ganz entspannt einen fertigen Foren-Post generieren lassen.

Und ja, es gibt Kritiker, die auch das schon als "KI-Content" verteufeln würden, aber ein so generierter Text ist für mich kein "KI-Content", sondern noch immer mein eigener Output, der mit dem Werkzeug KI aufgenommen, strukturiert und fehlerkorrigiert wurde. Die Gedanken, Ideen und Erfahrungen stammen noch immer alle von mir. Ich finde das extrem spannend und vor allem hilfreich, wenn man dadurch seine Zeit viel efffizienter nutzen kann.

Fazit:
Bzgl. PureBasic + KI bin ich immer noch am Experimentieren und Optimieren. PureBasic ist für die KI eine Nischensprache, und das wird sich so schnell nicht ändern. In Kombination mit WinAPI-Programmierung, als Dokumentationshilfe und durch die Codex-Integration macht das Ganze aber wieder richtig Spaß.

Bei PureBasic + KI muss man Geduld mitbringen, viel ausprobieren und darf keine Perfektion erwarten. Aber wer bereit ist, sich in den KI-generierten Code reinzuarbeiten, ihn zu überarbeiten und die Denkweise der KI zu verstehen, wird mit völlig neuen Möglichkeiten belohnt. Für mich ist es das wert, jetzt Systemfunktionen nutzen zu können, die man früher aus Unwissenheit nicht angefasst hätte.

Ich bleibe jedenfalls am Ball und versuche weiter, den Workflow zu optimieren (auch wenn ich manchmal dran verzweifle). Aber auf der anderen Seite werden die KI-Modelle ja auch immer besser.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
RalfP
Beiträge: 53
Registriert: 17.03.2014 22:32
Computerausstattung: PC mit Intel i7 CPU, 16G Ram, Win11
Wohnort: 24321 Panker

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von RalfP »

Ja, schöne neue Welt.

Was mir an der ganzen Sache nicht schmeckt ist, dass alles dann quasi öffentlich ist. Das mag bei Bastel- o. Lernprojekten irrelevant erscheinen. Aber auch dabei vervollständigt es dein Persönlichkeitsprofil, das bisher "nur" aus Sozialmedia- und Suchmaschinendaten besteht. Ganz fatal wäre es, wenn die Angestellten, die an sensiblen Firmendaten (o. Aufträgen) arbeiten sich auch so helfen lassen. Dann müssen wir uns nicht wundern, wenn uns die, die auf der anderen Seite des Teichs leben, immer einen Schritt voraus sind und das auch bleiben werden. Ich kann mich noch daran erinnern, dass es einmal den Verdacht gab, die NSA sei in einen Fall von Wirtschaftsspionage gegen Airbus verwickelt (wohl um Boing zu helfen). Ich denke, sie werden es jetzt nicht bleiben lassen, nur weil es vielleicht unfair wäre mit den Daten von GPT.

Aber vielleicht bekommst Du auch irgendwann einmal eine e-Mail mit einer Einladung in die USA weil irgend ein Headhunter auf dich aufmerksam geworden ist, weil du immer so gute Ideen hast.
Benutzeravatar
Kurzer
Beiträge: 1621
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von Kurzer »

Hallo KI-Interessierte,

ich wollte heute mal meine ersten Tests mit Googles neuem Gemini 3 machen, nachdem ich im Netz vom aktuellen Release gelesen hatte. Laut diversen Berichten soll das Modell ja ziemlich gut sein, gerade auch im Bereich Programmierung. Da ich normalerweise nur OpenAI benutze und Google KI bisher kaum kenne, wollte ich mir das Ganze jetzt doch mal angucken.

Also habe ich das Google AI Studio im Browser geöffnet und dort einen Prompt eingegeben, der eigentlich nur einfachen PureBasic Code für einen kleinen Taschenrechner erzeugen sollte.

Der Prompt lautete:
Erstelle Quellcode für die Programmiersprache PureBasic Version 6.12. Erstelle in PureBasic eine Taschenrechner App, die sich am Layout des Windows Taschenrechners von Windows 7 orientiert. Es genügt, wenn die vier Grundrechenarten umgesetzt werden.

Und dann ging es los. Was danach passiert ist, hat mich doch ziemlich umgehauen.

Im Google AI Studio sieht man ja live, welche Dateien gerade entstehen und was drin steht. Wie ein Multi-Tab Editor im Browser. Und während ich einfach nur eine PB Quelle erwartet hatte, hat Gemini 3 mehrere Minuten lang verschiedene Dateien aufgebaut. Zu meiner Überraschung waren das aber keine PB Dateien, sondern HTML, CSS und TypeScript.

Als der Prozess fertig war, stellte ich fest, dass Gemini 3 eine komplette Web App erzeugt hatte. Die App hatte ein Eingabefeld für einen Prompt und einen Button, der aus dem Prompt PureBasic Code generieren sollte. Also eine Art Mini IDE, die wiederum selbst PB Code schreibt. Mein ursprünglicher Prompt wurde sogar automatisch in das Eingabefeld übernommen.

Ich habe die App einfach mal gestartet und sie lief sofort. Der erzeugte PureBasic Code war nicht komplett fehlerfrei. Protected Variablen musste ich zum Beispiel auf Global ändern und für rechtsbündigen Text gibt es in PB keine passende Konstante. Aber nach zwei, drei kleinen Korrekturen lief das PB Programm problemlos.

Einerseits war ich ziemlich beeindruckt. Ein einziger Prompt erzeugt im One-Shot inkl. autonomer Fehlerprüfung und Korrektur eine funktionierende Web App mit Prompt Verarbeitung und PureBasic Code Generator (auch, wenn ich das gar nicht angefragt hatte). Hammer!!! Echt. Ich muss mir die Dateien noch genauer ansehen. Eigentlich müsste der Zugriff auf Gemini ja über einen API Key laufen.

Andererseits wollte ich ja gar keine Web App haben, sondern einfach direkt PB Code vom Modell. In mehreren weiteren Tests hat Gemini 3 aber wieder nur HTML und JavaScript Strukturen erzeugt.

Deshalb meine Fragen an alle, die schon länger mit Gemini arbeiten:

Wie bringt man Gemini 3 dazu, direkt PureBasic Code auszugeben?
Hat das jemand von euch schon erfolgreich hinbekommen?
Oder ist Gemini 3 vielleicht generell so eingestellt, dass es am liebsten Web Apps erzeugt und andere Sprachen wie PureBasic eher ignoriert?

Ich habe heute zum ersten Mal damit gearbeitet und habe daher noch keine Erfahrung, wie man das Modell zuverlässig in eine bestimmte Richtung lenkt, ohne dass es direkt wieder HTML und JS baut.

Schon mal vielen Dank für Tipps und Erfahrungsberichte.

Bild

Bild

Bild
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von Kiffi »

mh, ich habe Deinen Prompt in meinem Studio eingegeben und sofort den passenden PB-Code (mit den üblichen kleinen Fehlern) bekommen.
a²+b²=mc²
Benutzeravatar
Macros
Beiträge: 1366
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von Macros »

In dem Screenshot findet sich zwar lauffähiger aber sehr fragwürdiger Code. Eine Schleife um abschließende Nullen bei STRF zu entfernen? Sen Text erst auf falschen Wert setzen und dann nachkorrigieren?
Da könnte man auch RTRIM oder einfach StrF ohne Parameter für Stellen verwenden. Ich bin nicht wirklich überzeugt.

Bei meinem Standardtest einen größeren Code hineinzuwerfen und dann zu fragen: "Kommentiere was der Code tut, finde Fehler und schlage 2 Verbesserungen vor" hat Gemini weitgehend versagt. Der Sinn des Codes wurde erfasst. Alle 3 Bugs waren jedoch keine, und die Verbesserungen wären Verschlechterungen gewesen.

Da hat sich bisher Grok am besten angestellt mit einer Trefferquote von ca 50% bei Bugs (im weitesten Sinne) und ca 80% bei Verbesserungsideen.
Aber auch bei Grok ist mir die Qualität von generiertem Code im Allgemeinen zu schlecht. Für kurze Funktionen gehts meist.
Bild
Benutzeravatar
Kurzer
Beiträge: 1621
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von Kurzer »

Ja, um die Codequalität habe ich mich auch nicht gekümmert, weil Gemini nicht das getan hat, was ich eigentlich wollte. Ich war aber erstaunt wie gut es mit HTML, CSS und TypeScript hantieren kann.

@Kiffi: Nachdem du das geschrieben hast, habe ich den Prompt auch noch einmal direkt im "Playground" eingegeben (wie vorher auch). Was soll ich sagen? Diesmal ist er nicht direkt in den "Build" Bereich gesprungen, sondern es kamen zwei Responses mit Quellcode.

Bild

Keine Ahnung warum Gemini so komplett unterschiedlich agiert. :freak:

Aber davon abgesehen, versteh ich nicht, was der Build-Bereich im Google AI-Studio sein soll. Dort kann Gemini offenbar nur Webzeugs erstellen, aber kein PureBasic Code. Ich habe aber gelesen, dass es eine kostenfrei nutzbare Gemini Coding Agent -Extendion für Visual Studio Code gibt. Die werde ich mir später mal ansehen. Evtl. ist das Modell dort nicht ganz so unberechenbar. Für die OpenAI Codex-Extension muss man ja einen Abo haben. Hab ich zwar, aber die Coding Leistung ist da leider trotz anfänglicher Euphorie nicht so super. Selbst beim Bau einer Webseite verbrät man irgendwann einen Haufen Zeit für Kleinigkeiten, die die KI nicht rafft oder wenn sie wieder was kaputtprogrammiert und man auf ein Backup zurückgreifen muss.

Naja, trotzdem spannendes Thema - für mich ist es nur Hobby, hängt nix dran, deswegen kann ich mir das leisten, wenn der KI-Agent sich später doch als unterdurchschnittlicher Azubi herausstellt.

PS: (wenige Augenblicke später...)
Okay, was die PureBasic Codequalität angeht, gebe ich euch recht. Da scheint auch Gemini 3 genau so schlecht zu sein wie GPT 5.1.

Ich bin aber auch der Meinung, dass die heutigen LLMs irgendwie auf einem falschen Konzept beruhen. Die wird einmal mit exorbitantem Ressourcenverbrauch das Internet leergesaugt, damit dann alle Gewichte des Modells trainiert und die stellen dann das fertige, in Beton gegossene, Gedächtnis dar. Wenn die KI was dazulernen soll (also ich meine jetzt nicht einfach mal im Netz was nachschlagen, sondern dauerhaft lernen), dann muss der gesamte neuronale Kollos wieder durch die Gigawatt-Hölle geschoben und neu trainiert werden.

Mir ist schleierhaft, warum man bei der KI Entwicklung nicht in eine Richtung geht, wo die kognitiven Verarbeitungs-Fähigkeiten (neuronal basierend, fest eintrainiert) von den Daten, also dem Gedächtnis getrennt werden. Spricht doch sicherlich nichts dagegen, dass das Wissen einer KI im Modell selbst als Datenbank vorliegt. Dann würde es sicherlich auch weniger Halluzinationen geben, weil dann faktische Daten vorliegen und diese nicht auf Basis einer neuronalen Wahrscheinlichkeitskette zusammengestöpselt werden.

Das hätte auch den netten Nebeneffekt, dass man -pro User getrennt- einen eigenen, privaten Gedächtnisspeicher einrichten könnte, den man als Anwender dann ggf. downloaden, sichern und in andere Modelle wieder hochladen könnte. Da bin ich meiner Zeit aber vermutlich zu weit voraus. :lol:
Und ich meine jetzt nicht diesen witzlosen Ansatz, wie bei OpenAI, dass die KI einen elektronischen Notizzettel hat, auf dem Sie sich ein paar Sachen über den Anwender merkt (bei Chat-GPT "Erinnerung" genannt).
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
mk-soft
Beiträge: 3871
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von mk-soft »

Ich bin ein wenig schockiert ...

Ich habe mal Copilot nach eine Taschenrechner gefragt und das Ergebnis mit einen Minifehler war dieses.
Nach dem Hinweis das es eine Konstante nicht gibt war alles ok.

Code: Alles auswählen

; GUI-Taschenrechner in PureBasic
EnableExplicit

#WIN_Width  = 240
#WIN_Height = 320

#G_Display = 1

Enumeration 10
  #B_7 : #B_8 : #B_9 : #B_Div
  #B_4 : #B_5 : #B_6 : #B_Mul
  #B_1 : #B_2 : #B_3 : #B_Sub
  #B_0 : #B_Dot : #B_EQ : #B_Add
  #B_C
EndEnumeration

Global currentInput.s = ""
Global storedValue.d = 0.0
Global pendingOp.s = ""

Procedure UpdateDisplay()
  If currentInput = ""
    SetGadgetText(#G_Display, "0")
  Else
    SetGadgetText(#G_Display, currentInput)
  EndIf
EndProcedure

Procedure AppendDigit(text.s)
  If text = "." And FindString(currentInput, ".", 1) > 0
    ProcedureReturn
  EndIf
  currentInput + text
  UpdateDisplay()
EndProcedure

Procedure SetOperation(op.s)
  If currentInput <> ""
    storedValue = ValD(currentInput)
    currentInput = ""
    UpdateDisplay()
  EndIf
  pendingOp = op
EndProcedure

Procedure Calculate()
  If pendingOp = "" Or currentInput = ""
    ProcedureReturn
  EndIf

  Define.d rhs = ValD(currentInput)
  Define.d result

  Select pendingOp
    Case "+"
      result = storedValue + rhs
    Case "-"
      result = storedValue - rhs
    Case "*"
      result = storedValue * rhs
    Case "/"
      If rhs = 0
        currentInput = "Fehler"
        UpdateDisplay()
        pendingOp = ""
        ProcedureReturn
      EndIf
      result = storedValue / rhs
  EndSelect

  currentInput = StrD(result)
  UpdateDisplay()
  pendingOp = ""
EndProcedure

Procedure ResetAll()
  currentInput = ""
  storedValue  = 0.0
  pendingOp    = ""
  UpdateDisplay()
EndProcedure

If OpenWindow(0, 100, 100, #WIN_Width, #WIN_Height, "Taschenrechner", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

  StringGadget(#G_Display, 10, 10, #WIN_Width - 20, 40, "", #PB_String_ReadOnly)
  SetGadgetText(#G_Display, "0")

  Define x = 10, y = 60, w = 50, h = 40, gap = 10

  ; Zeile 1
  ButtonGadget(#B_7,   x,              y, w, h, "7")
  ButtonGadget(#B_8,   x + (w+gap),    y, w, h, "8")
  ButtonGadget(#B_9,   x + (w+gap)*2,  y, w, h, "9")
  ButtonGadget(#B_Div, x + (w+gap)*3,  y, w, h, "÷")

  ; Zeile 2
  y + (h+gap)
  ButtonGadget(#B_4,   x,              y, w, h, "4")
  ButtonGadget(#B_5,   x + (w+gap),    y, w, h, "5")
  ButtonGadget(#B_6,   x + (w+gap)*2,  y, w, h, "6")
  ButtonGadget(#B_Mul, x + (w+gap)*3,  y, w, h, "×")

  ; Zeile 3
  y + (h+gap)
  ButtonGadget(#B_1,   x,              y, w, h, "1")
  ButtonGadget(#B_2,   x + (w+gap),    y, w, h, "2")
  ButtonGadget(#B_3,   x + (w+gap)*2,  y, w, h, "3")
  ButtonGadget(#B_Sub, x + (w+gap)*3,  y, w, h, "−")

  ; Zeile 4
  y + (h+gap)
  ButtonGadget(#B_0,   x,              y, w, h, "0")
  ButtonGadget(#B_Dot, x + (w+gap),    y, w, h, ".")
  ButtonGadget(#B_EQ,  x + (w+gap)*2,  y, w, h, "=")
  ButtonGadget(#B_Add, x + (w+gap)*3,  y, w, h, "+")

  ; Zeile 5
  y + (h+gap)
  ButtonGadget(#B_C,   x, y, #WIN_Width - 20, h, "C")

  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #B_0 : AppendDigit("0")
          Case #B_1 : AppendDigit("1")
          Case #B_2 : AppendDigit("2")
          Case #B_3 : AppendDigit("3")
          Case #B_4 : AppendDigit("4")
          Case #B_5 : AppendDigit("5")
          Case #B_6 : AppendDigit("6")
          Case #B_7 : AppendDigit("7")
          Case #B_8 : AppendDigit("8")
          Case #B_9 : AppendDigit("9")
          Case #B_Dot : AppendDigit(".")
          Case #B_Add : SetOperation("+")
          Case #B_Sub : SetOperation("-")
          Case #B_Mul : SetOperation("*")
          Case #B_Div : SetOperation("/")
          Case #B_EQ  : Calculate()
          Case #B_C   : ResetAll()
        EndSelect
    EndSelect
  ForEver
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3871
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von mk-soft »

Copilot:

Adress Datenbank erstellen mit GUI und SQLite.
Nur Zwei Korrekturen als Hinweis waren erforderlich-
- GetDatabaseString war falsch
- Leere Datenbank erstellen wenn es diese noch nicht gibt.

Code: Alles auswählen

EnableExplicit

UseSQLiteDatabase()

Global db

; Prüfen, ob Datei existiert, sonst erstellen
If FileSize("adressbuch.db") = -1
  If CreateFile(0, "adressbuch.db")
    CloseFile(0)
  EndIf
EndIf

; Datenbank öffnen
If OpenDatabase(db, "adressbuch.db", "", "", #PB_Database_SQLite)
  DatabaseUpdate(db, "CREATE TABLE IF NOT EXISTS contacts (" +
                        "id INTEGER PRIMARY KEY, " +
                        "name TEXT, " +
                        "phone TEXT, " +
                        "email TEXT, " +
                        "street TEXT, " +
                        "city TEXT)")
Else
  MessageRequester("Fehler", "Konnte Datenbank nicht öffnen!")
  End
EndIf

; Fenster
If OpenWindow(0, 100, 100, 420, 380, "Adressbuch", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  TextGadget(1, 10, 10, 80, 20, "Name:")
  StringGadget(2, 100, 10, 200, 20, "")
  
  TextGadget(3, 10, 40, 80, 20, "Telefon:")
  StringGadget(4, 100, 40, 200, 20, "")
  
  TextGadget(5, 10, 70, 80, 20, "E-Mail:")
  StringGadget(6, 100, 70, 200, 20, "")
  
  TextGadget(7, 10, 100, 80, 20, "Straße:")
  StringGadget(8, 100, 100, 200, 20, "")
  
  TextGadget(9, 10, 130, 80, 20, "Ort:")
  StringGadget(10, 100, 130, 200, 20, "")
  
  ButtonGadget(11, 100, 160, 100, 25, "Speichern")
  ButtonGadget(12, 210, 160, 100, 25, "Liste anzeigen")
  
  ListViewGadget(13, 10, 200, 400, 160)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 11 ; Speichern
            Define name.s   = GetGadgetText(2)
            Define phone.s  = GetGadgetText(4)
            Define email.s  = GetGadgetText(6)
            Define street.s = GetGadgetText(8)
            Define city.s   = GetGadgetText(10)
            
            If name <> ""
              DatabaseUpdate(db, "INSERT INTO contacts (name, phone, email, street, city) VALUES ('" +
                                  name + "','" + phone + "','" + email + "','" + street + "','" + city + "')")
              MessageRequester("Info", "Kontakt gespeichert!")
            Else
              MessageRequester("Hinweis", "Name darf nicht leer sein.")
            EndIf
            
          Case 12 ; Liste anzeigen
            ClearGadgetItems(13)
            If DatabaseQuery(db, "SELECT name, phone, email, street, city FROM contacts ORDER BY name")
              While NextDatabaseRow(db)
                AddGadgetItem(13, -1, GetDatabaseString(db, 0) + " | " +
                                      GetDatabaseString(db, 1) + " | " +
                                      GetDatabaseString(db, 2) + " | " +
                                      GetDatabaseString(db, 3) + " | " +
                                      GetDatabaseString(db, 4))
              Wend
              FinishDatabaseQuery(db)
            EndIf
        EndSelect
    EndSelect
  ForEver
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kurzer
Beiträge: 1621
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von Kurzer »

Bist du schockiert über die Codequalität oder darüber, dass du nur 2 Fehler korrigieren musstest?
Copilot nutzt intern das GPT Modell, glaube ich.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Re: Verwendung von PB mit KI - und Frage zu WindowEvent

Beitrag von dige »

@Kurzer: vielleicht noch im Prompt am Anfang eine Rollenzuweisung ergänzen: Du bist ein Experte für Purerbasic Programmierung.
Und ich vermute auch, das der Begriff App vielleicht zu der WebApp Programmierung geführt hat.
"Papa, ich laufe schneller - dann ist es nicht so weit."
Antworten