Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Maximierung eines Programms nur auf ein Teil beschränken (https://www.delphipraxis.net/19178-maximierung-eines-programms-nur-auf-ein-teil-beschraenken.html)

xavior 30. Mär 2004 15:34


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!

xavior 30. Mär 2004 15:35

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?

SirThornberry 30. Mär 2004 15:36

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???

neolithos 30. Mär 2004 15:38

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Schau dir mal
Constraints
an!

xavior 30. Mär 2004 15:42

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!

neolithos 30. Mär 2004 15:44

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.

xavior 30. Mär 2004 15:46

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!)?

neolithos 30. Mär 2004 15:49

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Setz doch mal Testweise
Delphi-Quellcode:
Constraints.MaxHeight := 300;
Und genau der Effekt tritt ein!

Nix mit Align!

Delphi_Fanatic 30. Mär 2004 15:52

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Zitat:

Also ich möchte den Befehl für maximieren beim Maximieren-Knopf abfangen,
Hast Du's schon mal mit dem OnResize-Event Deines Formulars versucht ?

xavior 30. Mär 2004 15:53

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!

xavior 30. Mär 2004 15:55

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!

SirThornberry 30. Mär 2004 15:55

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

xavior 30. Mär 2004 15:58

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Hab ich schon versucht: s.o.

neolithos 30. Mär 2004 16:00

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:
Constraints.MinHeight := Height;
. Ist die Liste angezeigt dann setzt man
Delphi-Quellcode:
Constraints.MinHeight := 0;
. Und Fertig ist dieser Effekt. Mehr braucht man eigentlich nicht.

neolithos 30. Mär 2004 16:10

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Zitat:

Zitat von SirThornberry
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

Das gibt IMHO eine Endlosschleife! Jedenfalls so wie ich es verstehe!

xavior 30. Mär 2004 16:25

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:

neolithos 30. Mär 2004 16:38

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;

xavior 30. Mär 2004 16:44

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: !

neolithos 30. Mär 2004 16:54

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.

xavior 30. Mär 2004 16:57

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!

SirThornberry 30. Mär 2004 17:01

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)

neolithos 30. Mär 2004 17:03

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!

xavior 30. Mär 2004 17:11

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hier:

neolithos 30. Mär 2004 17:13

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Ich meinte mehr den Quelltext!

xavior 30. Mär 2004 17:17

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.

neolithos 30. Mär 2004 17:20

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Zitat:

Zitat von xavior
Code:

procedure TSForm.WMSysCommand(var Message: TWMSysCommand);
begin
 If Message.CmdType = SC_MAXIMIZE then
  ShowMessage('Test 1')
 else
  ShowMessage('Test 2'); // hier störts du wahrscheinlich den Windows ablauf -> verschieben
 inherited;
end;

Delphi-Quellcode:
procedure TSForm.WMSysCommand(var Message: TWMSysCommand);
begin
 If Message.CmdType = SC_MAXIMIZE then
    ShowMessage('Test 1')
 else
    inherited;
end;

xavior 30. Mär 2004 17:21

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
ohhh, hihihi das ist ja echt schlecht das ändere ich mal ganz schnell!

neolithos 30. Mär 2004 17:34

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein Bsp

xavior 30. Mär 2004 17:43

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
Danke! Ja hab ich!

1. Frage:

Code:
if CheckBox1.Checked and ((Message.CmdType = SC_MAXIMIZE) or (Message.CmdType = SC_MAXIMIZE + 2)) then
Wieso die "
Code:
+2
" hier
Code:
Message.CmdType = SC_MAXIMIZE + 2
?

2. Frage:

Code:
 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;
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!

neolithos 30. Mär 2004 17:46

Re: Maximierung eines Programms nur auf ein Teil beschränken
 
+2: stellt die Botschaft dar, falls Doppelt auf die Titelleiste geklickt wird.

neolithos 30. Mär 2004 17:49

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.

xavior 30. Mär 2004 18:13

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!

neolithos 30. Mär 2004 18:17

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!

xavior 30. Mär 2004 18:20

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!

neolithos 30. Mär 2004 18:32

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:
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;
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.

xavior 30. Mär 2004 18:41

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?!

neolithos 30. Mär 2004 18:46

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.

xavior 30. Mär 2004 18:52

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!?

neolithos 30. Mär 2004 18:55

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!

xavior 30. Mär 2004 19:00

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 19:10 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz