Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Dialogfelder einbetten, aber wie?
hRb - Mo 15.03.21 21:11
Titel: Dialogfelder einbetten, aber wie?
Hallo,
ich habe mich erstmals dem Thema "Vererben" zugewandt und durchblick es einfach nicht!
Meine Aufgabe klingt einfach: ich möchte ein neues Objekt TMyDruck mit
- TPageSetupDialog
- TPrintDialog und
- TSpeedButtom
auf ein Frame oder eine Form legen.
Scheitere dabei gleich an mehreren Fragen:
1. den Dialog-Objekten fehlen die Parameter Top, Left, Width, Height um sie auf der Form plazieren zu können.
2. die Dialogfelder sollen sich optisch "geöffnet" präsentieren: (Status Execute)
3. wird beim Aufruf das erste Objekt auf "Execute" gesetzt, dann stoppt das Programm, d.h. das zweite Dialogfeld wird nicht angezeigt.
Wer hilft mir Knoten für Knoten zu lösen? (oder hat jemand so etwas fertig?)
hRb
Moderiert von Th69: Titel geändert (war "Dialogfelder vererben, aber wie?").
Sinspin - Mo 15.03.21 21:42
0. erstelle das form selber mit TWhatever.Create(nil)
1. Pack sie in ein Panel. Parent ist dann das Panel. bsNone, alClient
2. verwende Show zum anzeigen.
3. Nene, das wird nix. Dialoge die gezwungen Modal dargestellt werden (via ShowModal/Execute) stoppen alles andere wären wärend sie offen sind.
Bei Knoten nehme ich immer die Schere.
€:
Was das ganze jetzt mit Vererben zu tuen hat begreife ich aber nicht.
Das ist Einbetten von Formularen.
€2: Tippfehler entfernt, "d" fehlte.
hRb - Di 16.03.21 20:47
Hallo Sinspin,
der Wille ist da, allein mir fehlt ...
(Danke für Antwort, war mir als Anfänger "zu kompakt").
Hier mein "gescheiterter" Versuch. Habe statt Panel es mal mit einer Groupbox versucht. Die Box erscheint auch allerdings derzeit ohne die Dialogfelder. Folgende Fehler:
- der Speedbuttom 'Drucken' lässt sich der Box zuweisen mit
Drucken.Parent := GroupBox1;
- Nicht jedoch
MyPageBox.Parent := GroupBox1;
dafür geht's mit InsertComponent
- ShowModal erzeugt Compilerfehler, obwohl Vcl.Forms eingebunden
Nachstehender Code ist mal ein Anfang. Weiterhin bleibt offen wie man Dialogfelder positioniert.
Zitat: |
Was das ganze jetzt mit Vererben zu tun hat begreife ich aber nicht. |
Um so besser, wenns ohne geht
hRb
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:
| unit Unit1;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Buttons, Vcl.ExtCtrls, Vcl.StdCtrls, Printers ;
type TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; Drucken: TSpeedButton; GroupBox1: TGroupBox; MyPageBox: TPageSetupDialog; MyPrintBox: TPrinterSetupDialog; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure DruckenClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin MyPageBox:=TPageSetupDialog.Create(nil); MyPrintBox:=TPrinterSetupDialog.Create(nil); Drucken.Parent := GroupBox1; GroupBox1.InsertComponent(MyPageBox); GroupBox1.InsertComponent(MyPrintBox); end;
procedure TForm1.Button1Click(Sender: TObject); begin GroupBox1.visible := true; MyPageBox.ShowModal; MyPrintBox.ShowModal; end;
procedure TForm1.DruckenClick(Sender: TObject); begin GroupBox1.Visible := false; ... end;
end. |
Moderiert von Th69: Delphi-Tags hinzugefügt
hRb - Di 16.03.21 22:51
Meinte, verstanden zu haben. Für meine derzeitige Drucken-Lösung habe ich im Mainmenü 3 Buttons:
1. Btn1 ruft PageDialog.execute auf (Einstellen von Ränder, Hoch/Quer)
2. Btn2 ruft PrintDialog.execute auf (Drucker auswählen, Druckbereich auswählen: alle Seiten, von..bis, markierten Bereich)
3. Btn3 startet Druckvorgang.
Manchmal vergisst man das eine, mal das andere. Das Problem wäre weg, wenn alles auf einer Form nebeneinander liegt. Habe aus der Antwort von Spinsin herausgelesen, dass dies mit Showmodal geht. Vielleicht nicht über eine Groupbox, eher über Form2
Zitat: |
Jedoch kannst du nicht zwei Dialoge gleichzeitig modal anzeigen (sondern sie würden dann nacheinander aufgerufen werden). |
Wer hat nun recht?
Und was ist an den Aufrufen
Delphi-Quelltext
1: 2:
| MyPageBox.Showmodal; MyPrintBox.ShowModal; |
falsch, bzw. warum liefert der Compiler hier Fehler? Wäre interessant, was geschieht, wenn wenigstens das erste Dialogfenster angezeigt wird.
hRb
Th69 - Mi 17.03.21 10:48
Auch Sinspin scheint dein Vorhaben wohl falsch verstanden zu haben.
Dein Vorhaben ist technisch nicht umsetzbar.
hRb - Mi 17.03.21 11:37
Hallo Th69,
wäre nicht auf die Idee gekommen, wenn es ein solches Bedienfeld nicht bei MS-Office schon ab V2010 gäbe. Die Dialogfelder von Embarcadero sind einfach schlecht. Aus beiden kann man den Druckvorgang nicht mit gutem Gewissen starten. Entweder ist der Drucker noch nicht ausgewählt oder der Seitenbereich. Was tun? Embarcadero bitten, ein neues Druck-Dialog-Objekt zu erstellen? Habe keine Kontakte. Vielleicht kann dies jemand übernehmen.
Danke für Antwort hRb
PS: warum sich MyPageBox.Showmodal nicht compilieren lässt bleibt offen.
Th69 - Mi 17.03.21 11:53
hRb hat folgendes geschrieben : |
PS: warum sich MyPageBox.Showmodal nicht compilieren lässt bleibt offen. |
Das habe ich dir doch geschrieben: die beiden von dir verwendeten Dialoge sind von
TCommonDialog [
http://docwiki.embarcadero.com/Libraries/Rio/de/Vcl.Dialogs.TCommonDialog] abgeleitet und dort heißt die Methode eben
Execute (statt wie bei von
TCustomForm abgeleiteten Forms
ShowModal).
PS: Ich habe auch mal den Titel geändert.
Ralf Jansen - Mi 17.03.21 11:58
Zitat: |
Embarcadero bitten, ein neues Druck-Dialog-Objekt zu erstellen? |
Wenn du etwas anderes brauchst als dir bereits zur Verfügung gestellt wird dann programmiere es?
Klingt nach Standardgeschäft als Entwickler das zu erschaffen was man braucht aber nicht existiert.
Sinspin - Mi 17.03.21 16:55
hRb hat folgendes geschrieben : |
Habe aus der Antwort von Spinsin herausgelesen, dass dies mit Showmodal geht. Vielleicht nicht über eine Groupbox, eher über Form2 |
Hmmm, erstmal ist das ein blöder Tippfehler, da fehlt ein "d".
Aber, ich habe es so verstanden dass du einen Dialog, der via Execute(oder ShowModal) angezeigt werden soll, in eine andere Form einbetten willst. Und das wird nix.
Drucken ist nach wie vor noch eine komplexe Sache.
Ich verwende eine Komponente zum drucken die die ganzen Dialoge mitbringt. Wenn Du das selber erledigen willst solltest du dir auch den Dialog dafür selber bauen.
hRb - Do 18.03.21 00:27
Hallo Spinsin
Zitat: |
Ich verwende eine Komponente zum Drucken die die ganzen Dialoge mitbringt. Wenn Du das selber erledigen willst solltest du dir auch den Dialog dafür selber bauen. |
1. Ok, erst mal erkenne ich, dass auch andere mit den vorhandenen Dialogen nicht zufrieden sind.
2. Bin Hobbyprogrammer, ohne die Möglichkeit einmal einen Kollegen zu fragen. Habe nur die EE als "Kollegen". Dachte, es müsste nicht jeder das Rad neu erfinden.
3. Ist es möglich, dass Du Deine Lösung hier einstellst? Selbst wenn noch einige spezifische Anpassungen notwendig werden, hätte ich einen "Leitfaden". Denn neue Dialoge mit eigenem (neuen) Eventhandler überfordert meine Fähigkeiten.
Hatte hier schon mehrfach vorgeschlagen, eine Ecke einzurichten mit Code-Bausteinen. Die Zeit hierfür scheint aber wohl abgelaufen, weil es immer weniger Anfänger gibt.
Zitat: |
Drucken ist nach wie vor noch eine komplexe Sache. |
Das funktioniert bei mir bestens. Habe hierzu gerade vor 20 Tagen ein komplett lauffähiges Programm eingestellt (siehe: Richedit Drucken).
Gruß hRb
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!