dcpushbutton mit mehrzeiligem Text [erledigt]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

dcpushbutton mit mehrzeiligem Text [erledigt]

Beitrag von Ewald »

Hallo,
gibt es wohl eine Möglichkeit, in einen mit express erzeugten pushbutton einen mehrzeiligen Text als Caption einzusetzen ?
Zeilenumbruch mit ; oder dergl. habe ich nicht hinbekommen.
Viele Grüße
Ewald
Zuletzt geändert von Ewald am Sa, 30. Mai 2009 16:02, insgesamt 1-mal geändert.
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Ewald,

ich kenne Express++ nicht so genau, aber mal angenommen, dcPushbutton wäre ein XbpPushbutton in Verkleidung, ginge das so:

Code: Alles auswählen

#define GWL_STYLE -16
#define BS_MULTILINE 0x00002000
   
nStyle := GetWindowLongA( oBtn:getHWND(), GWL_STYLE )
SetWindowLongA( oBtn:getHWND(), GWL_STYLE, bOr( nStyle, BS_MULTILINE ) )

DLLFUNCTION GetWindowLongA( hwnd, nIndex ) USING STDCALL FROM user32.dll
DLLFUNCTION SetWindowLongA( hwnd, nIndex, nValue ) USING STDCALL FROM user32.dll
Die Stelle des Zeilenumbruchs kannst du aber dabei leider nicht festlegen, so weit ich weiß.

Viele Grüße,
Günter
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Ewald »

Hallo Günter,
danke für deinen Vorschlag. Der ist nur fast genau so lang wie die kpl. Anwendung, die ich mit express++ erstellt habe :) Die Frage geht also nochmals in die Runde der express++ Anwender. Ich kann mit einem 2zeiler einen pushbutton beliebiger Grösse erstellen. Es kann doch irgendwie nicht sein, das ich da nur einen einzeiligen Text reinschreiben - oder. Fast die gleiche Problemstellung hatte ich grade beim DCBROWSE, wo ich die Spaltenüberschriften mit einem ; umbrechen kann und mehrzeilig darstellen kann.
Gruß
Ewald
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
Ewald hat geschrieben: Es kann doch irgendwie nicht sein, das ich da nur einen einzeiligen Text reinschreiben - oder. Fast die gleiche Problemstellung hatte ich grade beim DCBROWSE, wo ich die Spaltenüberschriften mit einem ; umbrechen kann und mehrzeilig darstellen kann.
Es ist leider so das "mehrzeiler" in Windows nicht vorgesehen sind.

Deshalb muss man seine "Erweiterungen" dazufügen indem man
seine eigene "Class" schreibt welche vom "original" (hier XbpPushbutton)
abgeleitet wird.

Die "müsste" Roger auch in Express++ gemacht haben (bin kein User)
denn man kann doch sicherlich auch "Bild & Text" auf eine DC-Button
machen ? Damit "müsste" Roger auch eine XbpStatic in seiner "Class"
haben wo man einen Text- Umbruch machen kann.

Der "Trick" von Günter per API ist mehr für "Experten" :)

gruss by OHR
Jimmy
P. Jossi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 31
Registriert: Mi, 17. Mai 2006 7:16

DC_push button

Beitrag von P. Jossi »

ich hoffe die Frage richtig verstanden zu haben

ich mache es so
cText:="Zeile 1;Zeile 2;Zeile 3"
@ 0,0 DCPUSHBUTTON CAPTION cText SIZE 25,4 ;
ACTION {||l_endep(1)} ;
ALIGNCAPTION BS_MULTILINE
Grüsse aus der Schweiz
Peter
Juergen
UDF-Programmierer
UDF-Programmierer
Beiträge: 92
Registriert: Di, 19. Dez 2006 19:37
Wohnort: Düsseldorf
Kontaktdaten:

Mehrzeiliger Button

Beitrag von Juergen »

Hallo Ewald,

@ 0,0 DCPUSHBUTTON ;
STATIC ;
ACTION {||....}, ;
OBJECT oButton1 ;

......


DCSETPARENT TO oButton1

@ 10,10 DCSAY 'Das;ist;aber;schön' ;
.....

DCSETPARENT TO

Gruß

Jürgen
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Ewald »

Hallo Peter,
viele Grüße in die Schweiz. So wie in deinem Beispiel beschrieben habe ich mir das vorgestellt. Aber was fehlt mir, wenn mein System
ALIGNCAPTION BS_MULTLINE nicht kennt ? Finde ich nicht in EXPRESS++ und nicht in XBASE++

Hallo Jürgen,
dann hänge ich mal meine Frage an dich sofort mit an. Hast du dein Beispiel ausprobiert ? Funktioniert bei mir nicht. Er schreibt den Text genau so, wie er in der Variabel steht. Das ; führt nicht zum Zeilenumbruch. Liegt das wohl auch an meiner fehlenden Konstante BS_MULTILINE ?

Danke an alle
Ewald
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
Ewald hat geschrieben: Aber was fehlt mir, wenn mein System ALIGNCAPTION BS_MULTLINE
nicht kennt ? Finde ich nicht in EXPRESS++ und nicht in XBASE++
kann es sein das es DCADDBUTTON (statt DCPUSHBUTTON) heist ?

DCADDBUTTON ;
CAPTION 'F' + Alltrim(Str(i)) + ';' + cCaption ;
PARENT oToolBar1 ;
ACCELKEY xbeK_F1 + (i-1) ;
CARGO cText ;
TOOLTIP cText ;
ACTION {|a,b,o|::hotButtonText(o)} ;
ALIGNCAPTION BS_MULTILINE
Ewald hat geschrieben: Liegt das wohl auch an meiner fehlenden Konstante BS_MULTILINE ?
sieh doch mal 6 Nachrichten zurück im Beispiel von Günter was dort als
#define steht.

gruss by OHR
Jimmy
Juergen
UDF-Programmierer
UDF-Programmierer
Beiträge: 92
Registriert: Di, 19. Dez 2006 19:37
Wohnort: Düsseldorf
Kontaktdaten:

Static-Buttons

Beitrag von Juergen »

Hallo Ewald,

Das geht nur mit Static-Buttons. Diese werden programmtechnisch
wie Fenster behandelt.

Es sind daher Bilder und Texte beliebig darstellbar.

Folgendes Beispiel habe ich gerade getestet:

LOCAL GetList:={}, getoptions, oButton1

@01,01 DCPUSHBUTTON ;
STATIC ;
OBJECT oButton1 ;
SIZE 15,5 ;
FOCUSCOLOR GRA_CLR_BLUE, GRA_CLR_RED


DCSETPARENT TO oButton1
@1,2 dcsay "Zeile 1"
@2,2 dcsay "Zeile 2"
@3,2 dcsay "Zeile 3"

DCSETPARENT TO

DCREAD GUI FIT

Ja, ja, Express ist nicht schlecht!


Gruß

Jürgen
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Ewald »

Hallo Jürgen,
da warst du etwas schneller. Ich habe mal Beispiel 5 eingedampft.

Code: Alles auswählen

@ 0,0 DCPUSHBUTTON ;
      STATIC ;
      OBJECT oButton1 ;
      SIZE 9,1.5

DCSETPARENT TO oButton1
@ 3,1 DCSAY 'weiterer;Auftrag' ;
      OPTIONS XBPSTATIC_TEXT_WORDBREAK ;
      SAYSIZE 50,50 ;
      PIXEL 
DCSETPARENT TO
ging auch. Dein letzter Versuch gefällt mir allerdings besser.
Ich kann mich deiner Meinung über EXPRESS++ nur anschließen. Es ist einfach genial gemacht. Es gibt Zeiten, da mache ich richtig "Meter" bei meinen Anwendungen. Bis es dann eben zu diesen kleinen Hakeleien kommt. Siehe oben. Kleine Ursache grosse Wirkung.
Nochmals vielen Dank an alle, das Ding hat sich dann erledigt.
Gruß
Ewald
P. Jossi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 31
Registriert: Mi, 17. Mai 2006 7:16

ch

Beitrag von P. Jossi »

Hallo Ewald ich denke dass Du nicht das richtige include file eingebunden hast
bei mir läuft das problemlos
viel Glück Peter
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Ewald »

Hallo Peter,
war auch meine Vermutung, aber ich habe umgehend alle include files durchsucht und nichts dergleichen gefunden. Hast du die vielleicht selbst irgendwo definiert - Siehe Beispiel Nr. 2 von Günter. Ich habe hier die XBASE++ und Express++ Versionen 1.9.
Würdest du wohl mal einen Suchlauf durch deine include Dateien laufen lassen um festzustellen, wo das herkommt.
Gruß
Ewald
P. Jossi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 31
Registriert: Mi, 17. Mai 2006 7:16

multiline

Beitrag von P. Jossi »

hallo ewald
in der documentation von express unter dcpushbutton steht dass BS_MULTILINE in DCDIALOG.CH definert ist. (eigentlich alle BS_ variabeln)
hast dcdialog eingebunden?
Peter
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Ewald »

Hallo Peter,
Habe ich eingebunden. Sonst könnte ich ja überhaupt keinen Button mit express++erzeugen. Ich habe meine dcdialog.ch nochmals durchsucht. Nichts zu holen. Da gibt es überhaupt keine BS_ Einträge in Version 1.7, 1.8 und 1.9. . Welche Version setzt du denn ein ?
Ewald
P. Jossi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 31
Registriert: Mi, 17. Mai 2006 7:16

Beitrag von P. Jossi »

hallo ewald
dcdialog.ch 6.8.2006 aus 1.9
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Ewald »

Hallo Peter,
wer hat der hat ... :| Meine DCDIALOG.CH ist aus 2004 und trägt im Header eine Datum aus 2002. Da bin ich wohl nicht mehr auf dem Stand der Dinge.
Ewald
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo,
funktioniert bei mir auch einwandfrei in eXPress++, nur verwende ich CRLF zur Trennung der Zeilen bei der Caption, und nicht ";"

Grüsse
Rudolf
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Ewald »

Hallo Rudolf,
das will ich natürlich auch sofort testen. Wie gibst du denn CRLF genau ein ? "Zeile 1" + chr(13) + "Zeile 2" - oder so ?
Gru?
Ewald
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Ewald,
wenn dann sicherlich chr( 13 ) + chr( 10 )!
Ersteres ist ja nur "Carriage Return" (also "Wagenrücklauf") und letzteres "Linefeed" (also "Zeilenvorschub").

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Also in den Windowsmessageboxen reicht chr(13).

ich habe einen define in meiner allgemeinen ch Datei gemacht:

#define CRLF chr(13)+chr(10)

so kann ich immer CRLF nutzen ohne eine Variable zu verbraten.
Gruß
Hubert
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Ewald »

So, Hoffnung keimte erneut auf und Begeisterung stellte sich ein. Aber nur kurz...
CRLF ist in DCCGI.CH auch schon definiert mit (chr(13)+chr(10)).
Hilft mir aber nicht so recht weiter.
Die Anweisung ... caption = "Zeile1 " + CRLF + " Zeile2 " wird einzeilig ausgegeben. Die Konstante (bzw die Steuerzeichen) werden als Symbole ausgegeben. Will sagen, auf dem Button steht einzeilig
Zeile1 || Zeile2
Liegt wahrscheinlich doch an meiner uralten Express - Version (1.7).
Die Lösung mit dem Static-Button funktioniert ja und wie sagten schon die alten Griechen - never change a running ..... - oder waren es die Franzosen - egal
Nochmals danke
Ewald
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Ewald,
mit 1.7 gehts nicht, es rentiert sich auf alle Fälle auf die neueste Version umzusteigen. eXPress++ hat in jeder neuen Version eine Menge wirklich toller Erweiterungen.
Grüsse
Rudolf
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Ewald »

Hallo Rudolf,
dann bin ich ja doch erleichtert, dass es nicht an mir lag
Ich werde meine Einstellung zu Updates/Upgrades noch mal überdenken. :)
Antworten