![]() |
Maximierung eines Programms nur auf ein Teil beschränken
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich hab folgendes Problem, ich möchte ein Suchfenster für eine SQL-Datenbank (InterBase) erstellen, welches ungefähr so aussieht wie das Such-Fenster aus Win 98! Mit SQL hab ich kein Problem, aber ich krieg das mit dem maximieren nicht auf die Reihe! :wall: Ich möchte nämlich, dass es auch beim maximieren so aussieht wie bei Win 98!
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
P.S.: Und das Fenster lässt sich bei mir Irgendwie nicht mehr vom Platz bewegen! Woran kann das liegen?
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
könntest du eventuell noch nen screenshot schicken wo man sieht wie es unter win98 aussieht und was genau du nicht hinnbekommst?? Schaffst dus nicht die elemente an die richtigen stellen anzuordnen???
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Schau dir mal
Constraints an! |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Ich glaub ich hab mich falsch Ausgedrückt! Also ich möchte den Befehl für maximieren beim Maximieren-Knopf abfangen, damit wenn dan jemand auf Maximieren klickt mein Programm z.B. den Wert alTop bei Align setzen kann!
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Align brauchst du eigentlich nicht setzen. Wenn du eine Max-Größe angibts.
In WM_SYSCOMMAND kommt aber die Nachricht an, falls jemand auf Maximieren klickt. |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Liste der Anhänge anzeigen (Anzahl: 1)
@ SirThornberry: Hier ist das Bild wie es maximiert aussieht!
Hat den keiner eine Antwort drauf warum sich mein Programm nach dem Compilieren nicht mehr von der stelle zu bewegen ist (z.B. von der Mitte zu linken Seite!)? |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Setz doch mal Testweise
Delphi-Quellcode:
Und genau der Effekt tritt ein!
Constraints.MaxHeight := 300;
Nix mit Align! |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Zitat:
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
OK das hab ich ja schon geraft, aber ich bin noch blutiger Anfänger und ich hab keine Ahnung wie ich WM_SYSCOMMAND einsetzen kann!? Und mit verschieben meine ich die Position des Fenstersverändern nicht die größe!
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
@Delphi_Fanatic: Ja hab ich, aber die Prozedur wird erst aufgerufen nachdem das Fenster von mir einmal verößert wurde und wenn ich es danach versuche wieder zu verkleinern!
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Du könntest die "Align"-Property's einfach setzen so das sich automatich beim vergrößern/verkleinern alles anpasst. Alternativ (wie schon geschrieben wurde) geht auch das OnResize-Event des Formulars
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Hab ich schon versucht: s.o.
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
WM_SYSCOMMAND ist eine Windows - Nachricht! In der Mitgeteilt wird das das Maximieren eingeleitet werden soll.
Man kann in ihr aber nicht den Maximierungsvorgang steuern, was du ja willst! Um dies zu bewerkstelligen müssen andere Nachrichten abgefangen werden. Dies wurde von den Borlander schon vorbereitet. Steuern kann man also das Verhalten eines Fenster, indem man die Contraints-Werte setzt. Wie ich das die ganze Zeit schon versuche begreiflich zu machen. Ist also noch keine Suche erfolgt, die Liste unten also ausgeblendet setzt man
Delphi-Quellcode:
. Ist die Liste angezeigt dann setzt man
Constraints.MinHeight := Height;
Delphi-Quellcode:
. Und Fertig ist dieser Effekt. Mehr braucht man eigentlich nicht.
Constraints.MinHeight := 0;
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Zitat:
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Ja aber wie frage ich den WM_SYSCOMMAND ab! (Ich hab mir schon die hälfte meiner Kopfhaare ausgerupft!) :wall:
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Wieso machst du sowas!
Obwohl ich Dir schon erklärt habe wie man das OHNE WM_SYSCOMMAND macht. Aber bitte, obwohl man das Problem so mit dem Holzhammer erschlägt:
Delphi-Quellcode:
type
TForm1 = class private procedure WMSysCommand(var Message : TWMSysCommand); message WM_SYSCOMMAND; procedure TForm1.WMSysCommand(var Message : TWMSysCommand); begin if Message.CmdType = SC_MAXIMIZE then // was nun? else inherited; // für alle Anderen end; |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Tut mir leid, ich sag ja ich bin noch Anfänger! Boar, aber trozdem danke, genau sowas meinte ich! Und ich versteh es sogar! :thuimb: :zwinker: :hello:
P.S.: Aber ich hab noch immer das Problem das mein Programm nicht mehr seine Position bei Drag & Drop ändert :gruebel: ! |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Wenn das das Problem ist?
Bei Maximierten Fenstern kann man nicht die Position ändern. Versuche statt align in WM_SYSCOMMAND mit SetBounds das Formular auszurichten. |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Nein ich meine im ganz normalen zustand also wie ich das Programm desighnt habe, als würde Windows es festkleben!
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
könnte nen fehler sein der selten mal auftritt wenn man den windowstate bissl hinn und her geändert hat über den Objectinspektor. mach mal nen rechtsklick auf dein programm in der Taskleiste und schau nach ab es da den unterpunkt "Wiederherstellen" gibt (in nicht maximiertem zustand)
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Zeig mal bitte was du bis jetzt Fenstertechnisch geschrieben hast!
Ins blaue raten mag ich nicht! |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Liste der Anhänge anzeigen (Anzahl: 3)
Hier:
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Ich meinte mehr den Quelltext!
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Achso! Da hab ich eigentlich garnichts!
Aber trozdem:
Code:
unit BE_SForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IBDatabase, DB, IBCustomDataSet, IBQuery, Buttons, ComCtrls, Grids, DBGrids, StdCtrls, ExtCtrls, Menus; type TSForm = class(TForm) DBGrid: TDBGrid; Anim: TAnimate; DBDatabase: TIBDatabase; DBSource: TDataSource; DBQuery: TIBQuery; DBTransaction: TIBTransaction; TabSelec: TTabControl; MMenu: TMainMenu; Datei1: TMenuItem; Bearbeiten1: TMenuItem; Ansicht1: TMenuItem; Optionen1: TMenuItem; Hilfe1: TMenuItem; TopLine: TBevel; Selec: TComboBox; SField: TEdit; Stop: TSpeedButton; DB: TComboBox; SField_Name: TLabel; Search: TSpeedButton; Selec_Name: TLabel; DB_Name: TLabel; DBBrowse: TSpeedButton; NewSearch: TSpeedButton; Status: TStatusBar; procedure Search_start(Sender: TObject); private procedure WMSysCommand(var Message: TWMSysCommand); Message WM_SYSCOMMAND; public { Public-Deklarationen } end; var SForm: TSForm; implementation {$R *.dfm} procedure TSForm.Search_start(Sender: TObject); var HK, HKKHK, KHK, HKK: String; Dummy: Real; ErrorCode: Integer; begin HK := ''''; // Hochkommata (') HKKHK := HK + ',' + HK; // Hochkommata + Komma + Hochkommata (',') KHK := ',' + HK; // Komma + Hochkommata (,') HKK := HK + ','; // Hochkommata + Komma (',) {If DB.ItemIndex = 0 then begin // !!! end;} end; procedure TSForm.WMSysCommand(var Message: TWMSysCommand); begin If Message.CmdType = SC_MAXIMIZE then ShowMessage('Test 1') else ShowMessage('Test 2'); inherited; end; end. |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Zitat:
Delphi-Quellcode:
procedure TSForm.WMSysCommand(var Message: TWMSysCommand);
begin If Message.CmdType = SC_MAXIMIZE then ShowMessage('Test 1') else inherited; end; |
Re: Maximierung eines Programms nur auf ein Teil beschränken
ohhh, hihihi das ist ja echt schlecht das ändere ich mal ganz schnell!
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein Bsp
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Danke! Ja hab ich!
1. Frage:
Code:
Wieso die "
if CheckBox1.Checked and ((Message.CmdType = SC_MAXIMIZE) or (Message.CmdType = SC_MAXIMIZE + 2)) then
Code:
" hier
+2
Code:
?
Message.CmdType = SC_MAXIMIZE + 2
2. Frage:
Code:
Was mach ich hier falsch? Bei 1. mal wir das Fenster bei maximieren nach oben verschoben (so wie es haben wollte! Außer das bei maximieren jetzt nicht mehr beim maximieren, im maximierten Zustand die 2 Doppeöfenster angezeigt werden!). Beim 2. mal passiert garnichts!
If (Message.CmdType = SC_MAXIMIZE) and (SForm.Align = alCustom) then begin
SForm.Align := alTop; end else begin inherited; end; If (Message.CmdType = SC_MAXIMIZE) and (SForm.Align = alTop) then begin SForm.Align := alCustom; end else begin inherited; end; |
Re: Maximierung eines Programms nur auf ein Teil beschränken
+2: stellt die Botschaft dar, falls Doppelt auf die Titelleiste geklickt wird.
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Die zweite Frage solltest du bitte mal in Deutsch übersetzen! Ich versteh nicht was du willst.
Mit dem Align habe ich noch nie auf Fensterebene gearbeitet. |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Liste der Anhänge anzeigen (Anzahl: 1)
Tut mir leid ich merk erst gerade, was ich eigentlich da verzapft habe!!!
1. Also ich möchte das beim klicken des Maximieren-Knopfes mein Fenster austomatisch durch Align nach oben verschoben wird (Das klappt ja auch)! Dabei hab ich gemerkt, dass wenn ich auf den Maximieren-Knopf drücke oben auf diesen besagten Knopf nicht die 2 Fenster erscheinen, die da eigentlich sein sollten (Bild unten)! 2. Jetzt wollte ich, dass wenn man nach dem maximieren, den Knopf nocheinmal drückt mein Programm sich wieder verkleinert und auf die UrPosition zurückkehrt! Aber das klappt ja irgendwie nicht! 3. Ansonsten hab ich noch immer das Problem, dass nach dem ich mein Programm compiliere, es wie festgeklebt ist und sich nicht mehr durch die Maus verschieben lässt! |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Es fehlt das Formular in deine rar-Datei.
*.dfm *.pas *.dpr Brauche ich! Um mal schauen zu können! |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Liste der Anhänge anzeigen (Anzahl: 1)
He? Hab ich eigentlich auch reingepackt! OK, dann lad ich das mal nochmal hoch!
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Du hattest alCustom gesetzt und das verhintert jegliches Bewegen des Formulares
So wäre es besser:
Delphi-Quellcode:
Das kann aber nicht funktionieren, da die alte Fenster Position bei alTop gemerkt und bei alNone wieder gesetzt werden müsste. Da umgeht man aber jegliche von Windows implementierte Funktionalität. Das Doppelfenster (beim Maximieren-Schalter) wird nie erscheinen, da das Fenster nicht maximiert ist. Schau die _ak noch mal genau an. Da wird auch gezeigt wie man den Offizellen Weg beschreitet, "mehr" haben die Win98-Programmierer auch nicht gemacht.
begin
If (Message.CmdType = SC_MAXIMIZE) or (Message.CmdType = SC_MAXIMIZE + 2) then if (SForm.Align = alTop) then SForm.Align := alNone else SForm.Align := alTop else inherited; end; |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Das ist jetzt nicht böse gemeint, aber was heißt jetzt "Offizieller Weg"? Soll ich jetzt eine Checkbox einfügen und den User immer darauf hinweisen das er diese anklicken soll bevor er das Fenster maximiert?!
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Neint ich meinte nur Align hat nix mit Maximieren zu tun.
Maximiert ist eine Fenster, wenn es den Gesamten Bildschirm ausfüllt oder wenigstens es in einer Achse macht. Align Positioniert nur das Fenster hat also nix mit Maximieren zu tun. Ich meinte bei meinen Bsp eigentlich die Aktion mit den Contraints.MaxHeight. Nicht in WM_SYSCOMMAND schauen, sondern das was der Schalter bewirkt untersuchen. Das hat auch nix mit der CheckBox zu tun. |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Ich weis, das hört sich jetzt vieleicht Dickköpfig an, aber ich "will", dass das Fenster nach oben verschoben wird, beim drücken des Maximieren-Knopfes! Also muss ich doch dazu WM_SYSCOMMAND abfragen oder nicht? Da ich ja den Maximieren-Knopf nicht anders ansprechen kann!?
|
Re: Maximierung eines Programms nur auf ein Teil beschränken
Liste der Anhänge anzeigen (Anzahl: 1)
Dickköpfig :mrgreen: Nimms mir nicht übel, ich sag dazu schwierig!
Anhang beachten! |
Re: Maximierung eines Programms nur auf ein Teil beschränken
Nee nehm ich dir nicht übel *ladmeineimginärewaffe* :-D Aber kann man damit dann auch, wenn ich diese Fenster vergrößere auf meine EditBoxen automatisch anpassen? (Du musst verstehen ich hab immer nur mir Turbo Pascal programmiert!)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz