Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
07.05.2002, 19:16
TheTinySteini



Moin...
Ich hab ein Problem (ach...), zu dem ich noch keine Lösung gefunden hab. Jedenfalls scheint sich die MSDN dazu auszuschweigen. Ich möchte gerne selber die Kontrolle darüber haben, wie groß ein Fenster wird, wenn man auf den Maximize-Button klickt. Im Prinzip ist das kein Problem, aber es ist ein MDI-Child-Fenster.
Deswegen haut er beim Maximieren seine Titelleiste in das Menü des MDI-Parents. Und genau das soll er nicht - der Parent soll nämlich gar kein Menü besitzen. Aber wenn es keins gibt, dann erstellt er extra für das Maximieren eines. Gah.
Die akzeptableste Lösung ist bisher, die Maximize-Message abzufangen und dann das Fenster selber größer zu machen. Aber dann bleibt natürlich der Maximize-Button. Der soll sich aber in einen Restore-Button ändern. Weil Maximize bei einem maximierten Fenster ist ziemlich sinnfrei.
Gibt's eine Möglichkeit, diesen Button "per Hand" zu ändern? Oder einfach drüberzumalen?

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
001
07.05.2002, 21:45
Tron



ev!l hack waere, du holst dir das handle fuer den nc (non-client) bereich, dann kannst du ueberall auf dem fenster rummalen, auch auf dem rahmen und titel.

anderer ansatz:
schau dir mal die WM_GETMINMAXINFO message an.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
002
08.05.2002, 09:58
TheTinySteini



Hmja... NC wär vermutlich noch die beste Lösung. Denn mit der MINMAXINFO hab ich schon rumgespielt, das klappt nicht. Er übernimmt es nicht richtig (man muss zwei Fenster öffnen und maximieren, dann eines schließen, dann hat das andere die richtige Größe), packt trotzdem die Menüleiste in den MDI-Parentframe und noch so ein paar andere Merkwürdigkeiten. Scheint jedenfalls nicht für MDI ausgelegt zu sein. Wenn man bei Delphi (in der Entwicklungsumgebung) ein Fenster maximiert, dann geht es ja auch nur so groß, dass man die Komponentenleiste noch sehen kann. Aber Delphi ist auch nicht MDI.
Na gut, also doch wieder ev!l h4x0rn...

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
003
08.05.2002, 20:26
TheTinySteini



[neuer Post wegen neuem Problem - auch wenn das alte noch nicht zufriedenstellend gelöst ist]

Sagt mal, ist das nur ein Bug von meinem Delphi, oder passiert folgendes bei euch auch?

Ich erstelle ein MDI-Parent und setze ein TImage direkt ins MDI-Parent (also eine Art Banner). Dann setze ich Image.Align := alTop, damit das Image immer den oberen Rand ausfüllt. So, und wenn ich jetzt ein Bild lade (im Code, nicht in den Object Properties), dann erscheint das TImage am oberen Rand mit dem geladenen Bild. Direkt drunter fängt dann der Client-Bereich des MDI-Parents an. Und dort wird das Bild nun nochmal angezeigt! Warum?
Hab ich irgendwas wichtiges übersehen?

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
004
08.05.2002, 20:37
mani



hm ttt nochmal zum 1. problem: kannst du nicht einfach das IDI_NAMEVOMWIEDERHERSTELLENSYMBOL durch zufügen einer resource gleichen namens ersetzen ?

--

zum Seitenanfang zum Seitenende Profil || Suche
005
08.05.2002, 22:08
TheTinySteini



Öh? Ich wüsste nicht, dass das Symbol überhaupt ne Ressourcen-ID hat...

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
006
08.05.2002, 22:57
mani



o_O
eigentlich schon

zumindest in c und die haben ja die winapi für delphi nicht geändert oso o_O
btw: auf was bezieht sich das 1. prob ? auf c oder delphi ?

--


Dieser Beitrag wurde am 08.05.2002 um 22:58 von mani bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
09.05.2002, 13:55
Another1



da könnte er recht haben. So standard symbole / resources haben fast immer ne feste resource ID

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
008
09.05.2002, 14:14
mani



ja, du bräuchstes nur das makro vom wiederherstellensymbol auf das vom maximieren symbol ändern :)

--

zum Seitenanfang zum Seitenende Profil || Suche
009
09.05.2002, 17:51
TheTinySteini



Um zu klären, auf welche Programmiersprachen ich ziele:
Das erste Problem war ursprünglich VBasic (ein altes Projekt, was ich endlich mal fertigstellen will). Mittlerweile brauch ich aber dabei so viel WinAPI-Zeug, dass ich eigentlich nur noch am Deklarationen raussuchen bin. Deswegen will ich das Teil nach Delphi portieren, wo schließlich das 2. Problem auftauchte.
Lieber hätte ich's ja unter C++, aber ich mag keine MFC, will's net in reiner API Programmieren (is Zeitverschwendung o_O) und hab auch keinen C++Builder. Also Delphi/OP.

Insofern ist #2 erstmal wichtiger.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
010
09.05.2002, 19:29
mani



wieso zeitverschwendung ? zeig mal nen code für nen button in delphi und ich dir in c :)

Quellcode:
SetUpWindow(hExit, "button", "Quit", WS_CHILD | WS_VISIBLE, xpos, ypos, breite, höhe, ein paar andere sachen);

bzw. hExit = CreateWindow(siehe SetUpWindow);

das war's eigentlich o_O

--

zum Seitenanfang zum Seitenende Profil || Suche
011
09.05.2002, 20:03
TheTinySteini



Ja verdammt! Nun red nicht dauernd um mein Problem drum rum =)

Es is btw. immer noch einfacher, in Delphi einfach den Button an der richtigen Stelle aufzuziehen als dass man erstmal die ganze Latte Funktionsaufruf eintippen muss (deine "ein paar andere Sachen" musste ja noch mitzählen), dann noch einige Male SetWindowLong, weil natürlich ein Standard-Button nicht vernünftig aussieht etc etc etc. Außerdem brauch ich das ganze noch für ein WebBrowser-Control und so weiter. Und ich möchte nicht dauernd das Programm starten, nur um zu gucken, ob ich Größe und Position richtig angegeben hab. Und sag mir nix von wegen Dialog-Box-Designer - das Teil is crappy³.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
012
10.05.2002, 05:53
Retro



Hier was für den hax0r in dir ;)Quellcode://-------------------------------------------------------------------
// Auf der Titelleiste des Fensters zeichnen
//-------------------------------------------------------------------
// Folgender Code (in den OnPaint und OnResize Eventhandlern des
// Formulars) zeichnet auf der rechten Seite der Titelleiste den
// String "My Text". Alle Methoden der TCanvas-Klasse können zum
// Zeichnen verwendet werden.
//-------------------------------------------------------------------

TCanvas * FCanvas = new TCanvas();
if(FCanvas)
{
  Caption = "" ;
  FCanvas->Handle = GetWindowDC(Handle);
  SetBkMode(FCanvas->Handle, TRANSPARENT);
  SetTextAlign(FCanvas->Handle, TA_RIGHT);
  SetTextColor(FCanvas->Handle, clWhite);
  FCanvas->TextOut(Width-FCanvas->TextWidth("My Text")-5, 6, "My Text");
  delete FCanvas;
}
Ist zwar BC++ aber lässt sich ja leicht übertragen!

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
013
10.05.2002, 11:39
TheTinySteini



Ah, ok danke... das werd ich mir mal reinziehen. Bleibt noch Problem #2. Ich werd mal sehen, ob ich das mit ner TCoolBar oder so geregelt kriege, aber ohne wär's mir lieber.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
014
10.05.2002, 21:02
TheTinySteini



[kein Edit wegen Zeitlimit, sorry]

Ich krieg's einfach nicht gebacken. Hier mal zwei Screenshots, vielleicht wird's dann klarer.
Also, so soll es aussehen (VisualBasic-Programm):

Es ist also ein MDI-Fenster, darin ein Image-Control. Auf diesem Image-Control sind weitere Image-Controls für die Buttons - und halt das Textfenster. Der dunkelgraue Bereich ist der Clientbereich des MDIs.

Und so sieht's bisher in Delphi aus - noch ohne die Buttons:

Wie man unschwer erkennen kann, wird das Bild zweimal angezeigt. Einmal im TImage und einmal im Client-Bereich. Ich hab sogar schon ins Paint-Event der Form nen FillRect-Befehl reingeschrieben, damit er alles dunkelgrau übermalt. Nix.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
015
10.05.2002, 21:48
Tron



hm... mach das timage weg und stattdessen ein bitblt dieses bildes beim PAINT ereignis.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
016
10.05.2002, 22:36
Retro



Sehr komisch... setz oben vielleicht erstmal ein TPanel auf dem du dann das TImage plazierst.

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
017
10.05.2002, 22:46
Ferdi



Zitat:
Tron postete
hm... mach das timage weg und stattdessen ein bitblt dieses bildes beim PAINT ereignis.

dann müsste man allerdings den Clientbereich anders einggrenzen.....
es sei den man zeichnet manuell auf das TImage....

--

zum Seitenanfang zum Seitenende Profil || Suche
018
10.05.2002, 22:50
TheTinySteini



Heureka! Mit nem TPanel geht's. Dankeschön.
Macht zwar nicht wirklich Sinn - aber is immer noch weniger Pfusch als bei VBasic (das ist ja auch net schwer o_O) =)

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche