Problem mit SetClipboard

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Problem mit SetClipboard

Beitrag von bin_neu_hier »

Hallo Leute,

gerade konnten mir RSBasic und Bisonte helfen, eine Doppelklickabfrage zu implementieren, da haut's mir schon wieder einen Knüppel zwischen die Beine:

mit o. g. Doppelklickabfrage wird in einem Jahreskalender das Datum gepickt, ungefähr so:

Code: Alles auswählen

Procedure DoppelKlickAbfrage(hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_LBUTTONDBLCLK
      gn = EventGadget()

       ; einige Berechnungen, um von einer TextGadgetnummer auf das Datum zu schliessen
       ; am Ende dann prüfen, ob Tag im Bereich 1...Ultimo liegt  
     
        If gn >= 0 And gn <= u

          ;Datumstring zusammenbauen
          x$ = Right("0"+Str(gn),2) + "." +  Right("0"+Str(m),2) + "." + Str(jahr)

          ; ins Clipboard
          SetClipboardText(x$)
          
          ; anzeigen
          MessageRequester("Information", x$, #PB_MessageRequester_Ok)

        EndIf
  EndSelect
  ProcedureReturn CallWindowProc_(DoppelKlickAbfrage, hWnd, uMsg, wParam, lParam)
EndProcedure
Jetzt passiert mit dem compilierten Programm Folgendes:

Solange der Messagerequester angezeigt wird, kann ich das Datum per {RechtKlick -einfügen} in eine Textdatei einfügen. Sobald der Messagerequester geschlossen wird, wird nur noch das Zeichen, auf das ich den Doppelklick gemacht habe, aus dem Clipboard eingefügt.

Ohne den Requester funktioniert es überhaupt nicht, dann wird nur das Zeichen, auf das ich den Doppelklick gemacht habe, aus dem Clipboard eingefügt. Warum ist der Datumsstring verschwunden? Und wie kann man das Verschwinden verhindern?
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Problem mit SetClipboard

Beitrag von Bisonte »

Ich frage mich gerade was

Code: Alles auswählen

gn = EventGadget()
        If gn >= 0 And gn <= u
zu bedeuten hat..
Das gehört nicht in einen Callback, da ein EventGadget() nicht unbedingt anliegt.
Desweiteren ... u ist nicht deklariert, also 0.

Um das Gadget zu ermitteln (also die Gadgetnummer von PB, habe ich in dem vorherigen Beispiel Props eingesetzt.

Dort sieht man in etwa, wie man an die PB Nummer kommt.

Edit : Wenn du zeigst, wie so ein Textgadget aussieht (also der Text der drinsteht), könnte man mal eben ein Beispiel
zimmern...
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Problem mit SetClipboard

Beitrag von bin_neu_hier »

Hallo Bisonte,

ich wollte mit meinem Codefragment nur andeuten, was da so passiert.

mit

Code: Alles auswählen

gn = EventGadget()
habe ich abgefragt, bei welchem Textgadget der Doppelklick ausgelöst wurde. Hat funktioniert, aber egal.

Das

Code: Alles auswählen

 ; einige Berechnungen, um von einer TextGadgetnummer auf das Datum zu schliessen
 ; am Ende dann prüfen, ob Tag im Bereich 1...Ultimo liegt  
sollte eigentlich nur andeuten, dass da noch was gerechnet wird. Unter anderem wird u ausgerechnet (ultimo, der letzte Tag eines Monats, also 31,28 oder 29, 31,30,31,...). Die Prüfung

Code: Alles auswählen

 If gn >= 1 And gn <= u
(0 war falsch!)
soll sicherstellen, dass gn keine anderen Werte als minimal 1 und maximal die jeweilige Anzahl der Tage eines Monats hat. Aber, das ist ja eigentlich gar nicht der Punkt, sondern dass der Wert im Clipboard so variiert wie beschrieben. Übrigens auch, wenn ich Deinen Beispielcode für die DoppelKlickabfrage vollständig einbaue.

Und gerade noch probiert: Mit #WM_RBUTTONDOWN funktioniert das korrekt, nur nicht mit #WM_LBUTTONDBLCLK. Warum?
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Antworten