Einen Button zu einem Programm hinzufügen

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
SommerWin
Foriker
Beiträge: 47
Registriert: Do 26. Jan 2017, 20:02
Kontaktdaten:

Einen Button zu einem Programm hinzufügen

Beitrag von SommerWin » Di 29. Aug 2017, 20:43

Hallo,
ist es möglich einem laufenden Programm einen weiteren Button hinzu zu fügen?
Ich plane ein Projekt mit dem sich per Tastendruck die Tastatur umschalten lässt und dann eine Bildschirmtastatur z.B. florence öffnet.
Der Benutzer soll weitere Keyboard Layouts selbst hinzufügen können, dann soll ein Button für das neue Layout erzeugt werden.
Danke schon mal im Vorab -- Kurt

SommerWin
Foriker
Beiträge: 47
Registriert: Do 26. Jan 2017, 20:02
Kontaktdaten:

Re: Einen Button zu einem Programm hinzufügen

Beitrag von SommerWin » Mi 30. Aug 2017, 06:56

Guten Morgen,
für die Buttons hätt ich eine funktionierende aber sehr umständliche Lösung:
Ein Maschinenprogramm modifiziert die FMain.form und startet anschliessend neu. Hat aber den Riesen Nachteil dass man kein Standalone Programm erzeugen kann. Somit ist diese Lösung unbrauchbar.
Aber ich habs jetzt viel eleganter gelöst mit einer table view, diese kann ich ja während der Laufzeit dynamisch vergrössern.
Muss das nur noch optisch aufwerten, so dass es tatsächlich wie ein Button aussieht.
Der Benutzer klickt dann auf die Tabellenspalte, dann schaltet die Tastatur um. Die Eingaben speichere ich in einer Log Datei, so dass sie beim nächsten Aufruf wieder verfügbar sind.

Schöne Grüsse Kurt

Benutzeravatar
4tionov
Site Admin
Beiträge: 251
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Einen Button zu einem Programm hinzufügen

Beitrag von 4tionov » Mi 30. Aug 2017, 07:38

Buttons, wie alle Controls, kannst du auch im Programm erzeugen. Sinnvollerweise stellst du dafür ein einem Form einen Container bereit, der ihn aufnehmen kann. Damit der Button "arbeiten" kann, brauchst du noch einen Observer, der dessen Events beobachtet und dann Code ausführt. Hier ist ein Beispiel:
createbutton-0.0.1.tar.gz
(11.37 KiB) 96-mal heruntergeladen
Der Button wird auf Klick in der Hbox "NextButtonHome" gebaut, es wird eine Observer erstellt, der ihn beobachtet (unter dem Namen "NewButton") und bei dem Click-Event des Buttons NewButton_Click() ausführt.

Hier findest du die Doku zu Button:
http://gambaswiki.org/wiki/comp/gb.qt4/button
Alles Gute,

4tionov

SommerWin
Foriker
Beiträge: 47
Registriert: Do 26. Jan 2017, 20:02
Kontaktdaten:

Re: Einen Button zu einem Programm hinzufügen

Beitrag von SommerWin » Mi 30. Aug 2017, 17:30

Daaaaankeeeee...
das iss ja viel einfacher als gedacht.
Somit brauch ich blos den Inhalt der Hiddenbox speichern, dann ist die Maske beim nächsten Programmstart wieder verfügbar...

Jetz werd ich aber gleich noch anspruchsvoll:

Wie kann ich dann einen Button aus der Hiddenbox wieder entfernen?

Schöne Grüsse -- Kurt

Benutzeravatar
gambi
Moderator
Beiträge: 319
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Einen Button zu einem Programm hinzufügen

Beitrag von gambi » Mi 30. Aug 2017, 18:58

Hallo Kurt,
auch das ist keine unlösbare Aufgabe :)

Du kannst übrigens auf den extra Observer verzichten.
Die Zeile Bt = New Button(NextButtonHome) As "NewButton" erzeugt das Observer-Objekt quasi on the fly.

Ich habe das mit dem Löschen eines Controls bisher so gelöst, dass ich dem Control einen Tag-Wert zugewiesen habe.
Hier auf die Schnelle der Code:
gambas code
Public Sub Button1_Click()

  Dim Bt As Button
  Dim Obs As Observer

  Bt = New Button(NextButtonHome) As "NewButton"
  Bt.Name = "NewButton"
  Bt.W = 100
  Bt.H = 36
  Bt.Text = "New Button"
  Bt.Show
  Bt.Tag = "NewButton"

  'Obs = New Observer(Bt) As "NewButton"

End

Public Sub NewButton_Click()

  Message("New button clicked")

End

Public Sub Button2_Click()
Dim c As Control

  For Each c In Me.Controls
    If c.Tag = "NewButton" Then c.Delete
  Next

End
gg

SommerWin
Foriker
Beiträge: 47
Registriert: Do 26. Jan 2017, 20:02
Kontaktdaten:

Re: Einen Button zu einem Programm hinzufügen

Beitrag von SommerWin » Do 31. Aug 2017, 20:04

Genial... iss scho fast perfekt...
Last.Tag liefert den angeklickten Wert, schätz das Projekt wird bald fertig sein.
Dann liefer ich es hier ab...

besten Dank... Kurt



' Gambas class file

Public Sub Button1_Click()

Dim Bt As Button
Dim NewBtnName As String

NewBtnName = TextBox1.Text

Bt = New Button(NextButtonHome) As "NewButton"
Bt.Name = NewBtnName
Bt.W = 100
Bt.H = 36
Bt.Text = NewBtnName
Bt.Show
Bt.Tag = NewBtnName

End

Public Sub NewButton_Click()

Message("Es wurde der Button " & Last.Tag & " geklickt")

End

Public Sub Button2_Click()
Dim c As Control
Dim DelBtnName As String

DelBtnName = TextBox2.Text

For Each c In Me.Controls
If c.Tag = DelBtnName Then c.Delete
Next

End

Benutzeravatar
4tionov
Site Admin
Beiträge: 251
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Einen Button zu einem Programm hinzufügen

Beitrag von 4tionov » Do 31. Aug 2017, 21:59

gambi hat geschrieben:
Mi 30. Aug 2017, 18:58
Du kannst übrigens auf den extra Observer verzichten.
Die Zeile Bt = New Button(NextButtonHome) As "NewButton" erzeugt das Observer-Objekt quasi on the fly.
Cool, wusste ich nicht. Das kommt davon, wenn man seine Buttons immer mit der Maus malt. ;-)
Alles Gute,

4tionov

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste