Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Titelleiste / Rahmen der MessageDlg ausblenden (https://www.delphipraxis.net/182965-titelleiste-rahmen-der-messagedlg-ausblenden.html)

010101 30. Nov 2014 16:23

Delphi-Version: 7

Titelleiste / Rahmen der MessageDlg ausblenden
 
hallo,


weiss jemand einen code um den windowsrahmen bei der ausgabe von "MessageDlg" zu ändern bzw. wegzubekommen?

http://picload.org/image/coccwoc/rahmen.png

mfg

dGeek 30. Nov 2014 21:45

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Kann sein, dass ich Mist erzähle, aber du musst den Dialog "selber" erstellen.

Minimales Beispiel:
(das ist ein cut-out aus meiner eigenen, viel umfangreicheren Funktion. Die Funktion gibt einen Wert zurück, sodass man auf den Dialog reagieren kann)
Delphi-Quellcode:
function MsgBox(psCaption: string; psText: string; nHeigth: Integer; aMsgDlgType: TMsgDlgType; aMsgDlgBtn: TMsgDlgButtons; aMsgDlgBtnDef: TMsgDlgBtn): Integer;
var
  iModalRes: Integer;
  aMsgDialog: TForm; // vergessen hinzuzufügen
begin
  iModalRes := ID_NO;

  aMsgDialog := CreateMessageDialog(psText, aMsgDlgType, aMsgDlgBtn, aMsgDlgBtnDef);

  with aMsgDialog do
    begin
      BringToFront;
           
      Caption := psCaption;
      ClientHeight := nHeigth;
      BorderIcons := [];               // Keine Border-Icons
      BorderStyle := bsNone;           // Keine Titelleiste
      FormStyle := fsStayOnTop;

      Top := (Screen.Height div 2) - (Height div 2);
      SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
           
      iModalRes := ShowModal;

      Free;
    end;

  Result := iModalRes;
end;

// Aufruf:
case MsgBox('Caption', 'Text', 100, mtInformation, [mbYes, mbNo, mbClose], mbNo) of
  ID_YES: ;
  ID_NO: ;
  ID_CLOSE: ;
end;

010101 1. Dez 2014 09:46

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
das ist doch für die message box oder...
ich meine aber die MessageDlgPos. einfach was mit in den aufruf rein oder so. bei der form geht der windowsrahmen mit dem code weg.

http://www.delphipraxis.net/379391-post1.html


mfg

DeddyH 1. Dez 2014 10:13

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Wenn der Standard-MessageDlg so eine Option nicht bietet, muss man sich eben selbst etwas schreiben. Wie das geht, sollte der gepostete Code aufzeigen.

uligerhardt 1. Dez 2014 13:06

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

Zitat von 010101 (Beitrag 1281697)

Leider kann ich das Bild an meinem Arbeits-PC nicht sehen, dank paranoider Filtereinstellungen in unserer Firma. Dürfte ich vorschlagen, dass du für Bilder die DP-eigene Anhang-Funktionalität nimmst. Als Bonus gibt's auch ne kleine Vorschau. :mrgreen:

DeddyH 1. Dez 2014 13:30

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bin mal so frei :mrgreen:

uligerhardt 1. Dez 2014 14:12

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

Zitat von DeddyH (Beitrag 1281818)
Ich bin mal so frei :mrgreen:

Danke! :thumb:

dGeek 1. Dez 2014 15:05

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

ich meine aber die MessageDlgPos. einfach was mit in den aufruf rein oder so.
Das gibt es so nicht. Wie DeddyH bereits angemerkt hat, muss man dafür den Dialog selbst erzeugen.

Mein geposteter Code zeigt wie.

010101 1. Dez 2014 15:12

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

Zitat von dGeek (Beitrag 1281739)
Delphi-Quellcode:
function MsgBox(psCaption: string; psText: string; nHeigth: Integer; aMsgDlgType: TMsgDlgType; aMsgDlgBtn: TMsgDlgButtons; aMsgDlgBtnDef: TMsgDlgBtn): Integer;
var
  iModalRes: Integer;
begin
  iModalRes := ID_NO;

  aMsgDialog := CreateMessageDialog(psText, aMsgDlgType, aMsgDlgBtn, aMsgDlgBtnDef);

  with aMsgDialog do
    begin
      BringToFront;
           
      Caption := psCaption;
      ClientHeight := nHeigth;
      BorderIcons := [];               // Keine Border-Icons
      BorderStyle := bsNone;           // Keine Titelleiste
      FormStyle := fsStayOnTop;

      Top := (Screen.Height div 2) - (Height div 2);
      SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
           
      iModalRes := ShowModal;

      Free;
    end;

  Result := iModalRes;
end;

// Aufruf:
case MsgBox('Caption', 'Text', 100, mtInformation, [mbYes, mbNo, mbClose], mbNo) of
  ID_YES: ;
  ID_NO: ;
  ID_CLOSE: ;
end;


und wie bekomme ich den code in den aufruf von der TApplication eines buttons.

wenn das bei dir in einer leeren form geht, kannst die mir mal posten.


mfg

dGeek 1. Dez 2014 15:21

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Beispiel mit ausführbarer EXE im Anhang.

Um das Beispiel noch einfacher zu machen das alles noch einmal als Prozedur und nicht als Funktion.

Delphi-Quellcode:
procedure MsgBox(psCaption: string; psText: string; nHeigth: Integer; aMsgDlgType: TMsgDlgType; aMsgDlgBtn: TMsgDlgButtons; aMsgDlgBtnDef: TMsgDlgBtn);
var
  aMsgDialog: TForm; // versehentlich vergessen ..
begin
  aMsgDialog := CreateMessageDialog(psText, aMsgDlgType, aMsgDlgBtn, aMsgDlgBtnDef);

  with aMsgDialog do
    begin
      BringToFront;
           
      Caption := psCaption;
      ClientHeight := nHeigth;
      BorderIcons := []; // Keine Border-Icons
      BorderStyle := bsNone; // Keine Titelleiste
      FormStyle := fsStayOnTop;

      Top := (Screen.Height div 2) - (Height div 2);
      SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);

      Free;
    end;
end;

// Aufruf:
MsgBox('Caption', 'Text', 100, mtInformation, [mbYes, mbNo, mbClose], mbNo);

010101 1. Dez 2014 15:54

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
ja genau so hab ich das gemeint. kann zwar das project1 nicht öffnen hab aber die exe mal gestartet.

danke dir.

mfg

010101 1. Dez 2014 16:42

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

Zitat von dGeek (Beitrag 1281836)
Beispiel mit ausführbarer EXE im Anhang.

Um das Beispiel noch einfacher zu machen das alles noch einmal als Prozedur und nicht als Funktion.

Delphi-Quellcode:
procedure MsgBox(psCaption: string; psText: string; nHeigth: Integer; aMsgDlgType: TMsgDlgType; aMsgDlgBtn: TMsgDlgButtons; aMsgDlgBtnDef: TMsgDlgBtn);
var
  aMsgDialog: TForm; // versehentlich vergessen ..
begin
  aMsgDialog := CreateMessageDialog(psText, aMsgDlgType, aMsgDlgBtn, aMsgDlgBtnDef);

  with aMsgDialog do
    begin
      BringToFront;
           
      Caption := psCaption;
      ClientHeight := nHeigth;
      BorderIcons := []; // Keine Border-Icons
      BorderStyle := bsNone; // Keine Titelleiste
      FormStyle := fsStayOnTop;

      Top := (Screen.Height div 2) - (Height div 2);
      SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);

      Free;
    end;
end;

// Aufruf:
MsgBox('Caption', 'Text', 100, mtInformation, [mbYes, mbNo, mbClose], mbNo);

kannst du bitte dein project noch mal nachsehen, damit ich es mit delphi 7 auch öffnen kann.


gruss

himitsu 1. Dez 2014 17:10

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Könntest du eventuell den Fehler auch benennen?
> Warum bekommst du das Projekt nicht auf.


PS: Strg+C funktioniert auch in Fehler-Dialogen. :stupid: (als Text)

010101 1. Dez 2014 17:41

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anhang 42226


ich sehe nur dies bei öffnen dieses projects

pelzig 1. Dez 2014 20:18

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Den Objektinspektor haste nicht in deinem Delphi?

Left/Top/Height und Width kennste auch nicht?

F1- und F12-Taste sind auch kaputt?

Fragen über Fragen...:evil:

MfG

dGeek 1. Dez 2014 22:43

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Müsste jetzt eigentlich funktionieren.
Denn jetzt ist wirklich alles gekürzt wo es nur geht..

Wie sieht denn deine Fehlermeldung aus, warum kannst du das nicht öffnen?

Luckie 1. Dez 2014 23:13

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Interessant. Die Schaltflächen sind auf französisch bei meinem deutschen Windows 7. Benutzt du ein französisches Delphi?

himitsu 2. Dez 2014 01:23

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jupp, das tut er, wobei es ja aktuell (seit RAD-Studio und vorallem seit man das im Setup/Installer nicht mehr einstellen kann) keine direkten Sprachversionen mehr gibt und man das nur entsprechend umschalten muß.
[edit] In diesem Fall natürlich Tab 2. :stupid:

Hab mich schon immer gefragt, warum es eigentlich kein russisches und indisches Delphi gibt, wo dort doch angeblich viele Delphinutzer leben. :gruebel:

010101 2. Dez 2014 09:46

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
jetzt geht es schonmal zu öffnen, und beim test (grüner pfeil) kommt dann der fehler.

Anhang 42233


alle anderen projecte ob von mir oder aus foren gehen ohne probleme aufzumachen.

DeddyH 2. Dez 2014 10:00

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Cursor auf CreateMessageDialog setzen -> F1. Nun sollte man sehen können, welche Parameter erwartet werden. Den "überflüssigen" (heißt: Deinem Delphi nicht bekannten) muss man dann eben einfach löschen.

010101 2. Dez 2014 10:35

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anhang 42236

leider keine hilfen installiert

Zoot 2. Dez 2014 10:44

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

Zitat von 010101 (Beitrag 1281937)
Anhang 42236

leider keine hilfen installiert


Dann hilft wohl nur das Formatieren des Systemlaufwerks.

DeddyH 2. Dez 2014 10:46

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Ich meinte das zwar nicht während des Debuggings, aber der Hint zeigt doch schon, welche Parameter erwartet werden. Der letzte (Setzen des Default-Buttons) ist Delphi 7 nicht bekannt, also weg damit.

Klaus01 2. Dez 2014 10:55

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

Zitat von 010101 (Beitrag 1281932)
jetzt geht es schonmal zu öffnen, und beim test (grüner pfeil) kommt dann der fehler.

Anhang 42233


.. die Unit "Dialogs" hast Du eingebunden?
Denn dort ist mbClose definiert.

Grüße
Klaus

010101 2. Dez 2014 11:31

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DeddyH (Beitrag 1281940)
Ich meinte das zwar nicht während des Debuggings, aber der Hint zeigt doch schon, welche Parameter erwartet werden. Der letzte (Setzen des Default-Buttons) ist Delphi 7 nicht bekannt, also weg damit.


ist raus...

Anhang 42237


@klaus01

wie auch eingebunden?

DeddyH 2. Dez 2014 11:37

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Klaus meinte, ob die Unit Dialogs in Deiner uses-Klausel steht. Eigentlich müsste sie das, da CreateMessageDialog ja auch aus Dialogs stammt. Wieso mbClose allerdings unbekannt sein soll, weiß ich gerade auch nicht.

Klaus01 2. Dez 2014 11:39

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

Zitat von 010101 (Beitrag 1281951)
@klaus01

wie auch eingebunden?

Delphi-Quellcode:
Interface
   uses
     ..,Dialogs;
Grüße
Klaus

010101 2. Dez 2014 11:47

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Klaus01 (Beitrag 1281954)
Zitat:

Zitat von 010101 (Beitrag 1281951)
@klaus01

wie auch eingebunden?

Delphi-Quellcode:
Interface
   uses
     ..,Dialogs;
Grüße
Klaus

ja steht ja drin

Anhang 42238

na ja da bleibt der rahmen eben dran.

danke für eure hilfe.

pelzig 2. Dez 2014 12:03

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  aMsgDialog: TForm;
implementation

{$R *.DFM}

function MsgBox(psCaption: string; psText: string; nHeigth: Integer;
  aMsgDlgType: TMsgDlgType; aMsgDlgBtn: TMsgDlgButtons; aMsgDlgBtnDef:
  TMsgDlgBtn): Integer;
var
  iModalRes: Integer;
begin
  iModalRes := ID_NO;
  aMsgDialog := CreateMessageDialog(psText, aMsgDlgType, aMsgDlgBtn);
  with aMsgDialog do
  begin
    BringToFront;
    Caption := psCaption;
    ClientHeight := nHeigth;
    BorderIcons := []; // Keine Border-Icons
    BorderStyle := bsNone; // Keine Titelleiste
    FormStyle := fsStayOnTop;
    Top := (Screen.Height div 2) - (Height div 2);
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE
      or SWP_NOSIZE);
    iModalRes := ShowModal;
    Free;
  end;
  Result := iModalRes;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Aufruf:
  case MsgBox('Caption', 'Text im Dialog', 75, mtConfirmation, [mbYes, mbNo,
    mbCancel], mbNo) of
    ID_YES: Close;
    ID_NO: Close;
    ID_Cancel: ;
  end;

end;

end.

uligerhardt 2. Dez 2014 13:15

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

Zitat von Klaus01 (Beitrag 1281943)
Denn dort ist mbClose definiert.

Erst seit neuerem. Ich hab sie in D2007 noch nicht. Kam vielleicht mit FireMonkey rein?

DeddyH 2. Dez 2014 13:19

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
XE kennt mbClose auch schon, hat also mit dem Feueraffen nichts zu tun.

010101 2. Dez 2014 13:26

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
@pelzig

klasse funktioniert ohne fehler danke.


mein zeilenumbruch und leerzeile aus der MessageDlgPos funktionieren aber nicht mehr.

'das ist mein text'#13#10''+#13#10+'und hier geht er weiter'

gibts da unterschiedlichen code?

dGeek 2. Dez 2014 13:31

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

'das ist mein text'#13#10''+#13#10+'und hier geht er weiter'
>>
Delphi-Quellcode:
 'das ist mein text' + #13#10 + #13#10 + 'und hier geht er weiter'
oder
Delphi-Quellcode:
 'das ist mein text' + sLineBreak + sLineBreak + 'und hier geht er weiter'
Schau dir am besten noch einmal die Grundlagen der Programmierung in Delphi an.

010101 2. Dez 2014 17:31

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von dGeek (Beitrag 1281971)
Zitat:

'das ist mein text'#13#10''+#13#10+'und hier geht er weiter'
>>
Delphi-Quellcode:
 'das ist mein text' + #13#10 + #13#10 + 'und hier geht er weiter'
oder
Delphi-Quellcode:
 'das ist mein text' + sLineBreak + sLineBreak + 'und hier geht er weiter'
Schau dir am besten noch einmal die Grundlagen der Programmierung in Delphi an.


mach ich...

hier ist die zeile aus der MessageDlgPos

Delphi-Quellcode:
MessageDlgPos('das ist mein text'#13#10''+#13#10+'und hier geht er weiter'+#13#10+'und weiter'#13#10''+#13#10+'und weiter',mtcustom, [mbok], 30, 30, 100);

da musst du den umbruch /leerzeile in anführung setzen und es gibt keinen fehler.


ich wollte ja schon am anfang nicht so richtig an die message box ran.


aber egal, ich danke euch für die hilfe!




falls noch jemand lust hat, kann er ja versuchen einen custom rahmen um die message box zu coden ala...cruso

http://www.delphipraxis.net/379391-post1.html

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_STYLE, (GetWindowLong(Handle, GWL_STYLE) and not WS_Caption));
  ClientHeight := Height; //Ist besser so ;-)
  Refresh;
end;

das die box dann so in etwa aussieht:

Anhang 42240

:thumb:

dGeek 2. Dez 2014 18:24

AW: Titelleiste / Rahmen der MessageDlg ausblenden
 
Zitat:

ich wollte ja schon am anfang nicht so richtig an die message box ran.
Sehr schlechte Einstellung :P

Guck dir das längere Zeit an und übe ein wenig, dann ist das bald so einfach für dich wie Fahrradfahren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.

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