AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Mainform über .dProj - Datei auslesbar?
Thema durchsuchen
Ansicht
Themen-Optionen

Mainform über .dProj - Datei auslesbar?

Ein Thema von Harry Stahl · begonnen am 1. Nov 2018 · letzter Beitrag vom 2. Nov 2018
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.537 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Mainform über .dProj - Datei auslesbar?

  Alt 1. Nov 2018, 22:15
Das mit dem Auslesen der .dpr-Datei funktioniert ganz gut.

@EWeiss Wie sieht so ein Aufruf mit WinMain aus?

Hast Du da überhaupt klassische Formulare (.dfm-Dateien)?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Mainform über .dProj - Datei auslesbar?

  Alt 1. Nov 2018, 22:23
Eine dProj ist ja kein Ersatz sondern eine Erweiterung für die dpr-Datei.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#13

AW: Mainform über .dProj - Datei auslesbar?

  Alt 1. Nov 2018, 22:30
Das mit dem Auslesen der .dpr-Datei funktioniert ganz gut.
Würde aber bei einigen meiner Programme nicht funktionieren - einfach weil das MainForm programmatisch bestimmt wird. In der DPR wird gar kein Form erzeugt und daher in den Projekt-Optionen auch kein Hauptformular angezeigt. Das ist besonders dann hilfreich, wenn je nach aktueller Umgebung oder Konfiguration unterschiedliche Formulare zum Hauptformular werden sollen. Dein Tool sollte also auch diesen Fall erlauben.

Siehe auch hier: https://stackoverflow.com/questions/.../383197#383197
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.537 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Mainform über .dProj - Datei auslesbar?

  Alt 1. Nov 2018, 22:40
@Uwe: OK, wenn das zur Laufzeit entschieden wird, kann ich eh nichts machen. Dann wird eben keine "Mainform" gefunden und der User muss halt per Doppelklick auf eine der Dateien in der Projektliste entscheiden, welche Datei er laden möchte.

Ich wollte diese Funktion hier im Programm ergänzen, weil ich festgestellt habe, dass ich sehr oft etwas in der Mainform suche, da macht es Sinn, diese automatisch zu öffnen, spart mir wieder ein paar Klicks (kann man natürlich Optional an oder ausschalten)...

Geändert von Harry Stahl ( 1. Nov 2018 um 23:04 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: Mainform über .dProj - Datei auslesbar?

  Alt 2. Nov 2018, 09:46
Zitat:
@EWeiss Wie sieht so ein Aufruf mit WinMain aus?
Hast Du da überhaupt klassische Formulare (.dfm-Dateien)?
Nein nur dann wenn ich es explizit wünsche.
Die meiner Drawing64 Anwendung, ist quasi vom Aufbau fast immer gleich.

Delphi-Quellcode:
function WinMain(hInstance: HINST; hPrevInstance: HINST; lpCmdLine: PChar; nCmdShow: integer)
  : integer; stdcall;

var
  Msg: TMsg;
  myClass: PWideChar;
  myTitle: PWideChar;
  dwStyle: DWORD;
  wc: TWndClassEx;
  X: integer;
  Y: integer;
  IsInitialized: Bool;
  rc: TRect;
  Path: string;

begin

  myClass := 'POPUPWINDOW';

  wc.cbSize := SIZEOF(wc);
  IsInitialized := GetClassInfoEx(hInstance, myClass, wc);
  if IsInitialized = False then
  begin
    wc.cbSize := SIZEOF(wc);
    wc.style := CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS;
    wc.lpfnWndProc := @WndProc;
    wc.cbClsExtra := 0;
    wc.cbWndExtra := EXTEND_EXTRA * 4;
    wc.hInstance := hInstance;
    wc.hIcon := 0;
    wc.hCursor := LoadCursor(0, IDC_ARROW);
    wc.hbrBackground := 0;
    wc.lpszMenuName := nil;
    wc.lpszClassName := myClass;
    wc.hIconSm := wc.hIcon;

    if RegisterClassEx(wc) <> 0 then
      IsInitialized := True;
  end;

  if IsInitialized then
  begin

    dwExStyle := 0;
    dwStyle := WS_POPUP;

    SetRect(rc, 0, 0, XMIN_SIZE, YMIN_SIZE);
    AdjustWindowRectEx(rc, dwStyle, False, dwExStyle);

    X := MAX((GetSystemMetrics(SM_CXSCREEN) - rc.Right - rc.left) div 2, 0);
    Y := MAX((GetSystemMetrics(SM_CYSCREEN) - rc.Bottom - rc.Top) div 2, 0);

    // Create The Window
    myTitle := 'Drawing64';
    MainHandle := CreateWindowEx(dwExStyle, myClass, // Classen Name
      myTitle, // Window Titel
      dwStyle, // Definierte Window Style
      X, Y, // Windows Position
      rc.Right - rc.left, // Windows Weite
      rc.Bottom - rc.Top, // Windows Höhe
      0, // Kein Parent Window
      0, // Kein Menu
      wc.hInstance, // Instance
      nil); // Nichts zu WM_CREATE hinzufügen

    if MainHandle <> 0 then
    begin
      // Flag zum Neustarten wenn Skin geändert wurde
      Restart := False;

      UserAppDataDir := GetSpecialFolder(CSIDL_APPDATA);

      // Direktory erstellen wenn nicht vorhanden
      if not ForceDirectories(UserAppDataDir + '\BrewIdeas\Drawing64') then
      begin
        raise Exception.Create('Cannot create' + UserAppDataDir + '\BrewIdeas\Drawing64');
        Halt;
      end;

      Path := UserAppDataDir + '\BrewIdeas\Drawing64\';

      InitPath;
      DefSkin := DrawingIni.ReadString('SkinPath', 'Skin', ExtractFilePath(ParamStr(0))
          + 'Skins\Blue\Drawing64.ske');
      DrawingIni.Free;

      // Skin Initialisieren und einstellungen laden
      SKAERO_InitSkin(MainHandle, DefSkin, True, True);

      AddChildControls(MainHandle, wc.hInstance);

      // Ini laden
      LoadIni;

      // Window Anzeigen
      SKAERO_ShowMainWindow(MainHandle, 5);

      // Emuliert Aero in WinXP wenn in der Ini aktiviert
      if SKAERO_AEROEMULATE <> 0 then
        SetTimer(MainHandle, SKAERO_AERO_TIMER, SKAERO_AEROTIMERDELAY, nil);

      SetTimer(MainHandle, DRAWING_TIMER, 0, nil);

      // Windows Messagen verarbeiten
      while GetMessage(Msg, 0, 0, 0) do
      begin
        if IsDialogMessage(MainHandle, Msg) = False then
        begin
          TranslateMessage(Msg);
          DispatchMessage(Msg);
        end;
      end;

      // Falls aktiviert Timer beenden
      if SKAERO_AEROEMULATE <> 0 then
        KillTimer(MainHandle, SKAERO_AERO_TIMER);

      SKAERO_Free;

    end; // end WinHandle
  end
  else
    UnRegisterClass(wc.lpszClassName, hInstance);

  if Restart then
    Result := ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW)
  else
    Result := Msg.WParam;

end;
{$ENDREGION}
gruss
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.605 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

AW: Mainform über .dProj - Datei auslesbar?

  Alt 2. Nov 2018, 10:57
Eigentlich ist das doch OK, wenn Harry's Programm genauso funktioniert (oder nicht funktioniert) wie die IDE. Wenn es kein Application.CreateForm in der .DPR gibt, kann die IDE das Hauptformular auch nicht angeben (wenn man eines auswählt, fügt die IDE (gerne auch mal falschen) Code (gerne auch an der falschen Stelle) ein.
Thomas Mueller
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: Mainform über .dProj - Datei auslesbar?

  Alt 2. Nov 2018, 10:59
Zitat:
Eigentlich ist das doch OK, wenn Harry's Programm genauso funktioniert (oder nicht funktioniert) wie die IDE.
Dem widerspricht niemand.
Er hat mich gefragt und ich habe geantwortet

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#18

AW: Mainform über .dProj - Datei auslesbar?

  Alt 2. Nov 2018, 12:06
Eigentlich ist das doch OK, wenn Harry's Programm genauso funktioniert (oder nicht funktioniert) wie die IDE.
Das ist sogar vollkommen OK. Mein Einwand bezog sich eher darauf, daß es auch andere Fälle gibt, die zumindest zulässig bleiben sollten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.537 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Mainform über .dProj - Datei auslesbar?

  Alt 2. Nov 2018, 12:22
Zitat:
Eigentlich ist das doch OK, wenn Harry's Programm genauso funktioniert (oder nicht funktioniert) wie die IDE.
Dem widerspricht niemand.
Er hat mich gefragt und ich habe geantwortet

gruss
Und danke für die Antwort.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 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