<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hitzis Blog &#187; Coding</title>
	<atom:link href="http://blog.hitziger.net/category/computer/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hitziger.net</link>
	<description>Alles was mich so bewegt ...</description>
	<lastBuildDate>Thu, 20 May 2010 16:52:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Mehr Taskbareintr&#228;ge in einer Delphianwendung &#8230;</title>
		<link>http://blog.hitziger.net/2008/05/27/mehr-taskbareintrge-in-einer-delphianwendung/</link>
		<comments>http://blog.hitziger.net/2008/05/27/mehr-taskbareintrge-in-einer-delphianwendung/#comments</comments>
		<pubDate>Tue, 27 May 2008 05:06:53 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://blog.hitziger.net/?p=196</guid>
		<description><![CDATA[Wie man in einem Delphiprogramm sekund&#228;ren Fenstern die M&#246;glichkeit gibt auch in der Taskbar sichtbar zu sein, findet man ja relativ einfach im Internet. Dazu braucht man in der entsprechenden Form nur den folgenden Code einf&#252;gen: type TfrmExtra = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } protected procedure CreateParams(var Params : TCreateParams); override; [...]


Keine verwandten Einträge.]]></description>
			<content:encoded><![CDATA[<p>Wie man in einem Delphiprogramm sekund&#228;ren Fenstern die M&#246;glichkeit gibt auch in der Taskbar sichtbar zu sein, findet man ja relativ einfach <a href="http://www.swissdelphicenter.ch/de/showcode.php?id=775" target="_blank">im Internet</a>.</p>
<p>Dazu braucht man in der entsprechenden Form nur den folgenden Code einf&#252;gen:</p>
<div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:01af916a-07a9-425d-aa24-8c4fbd9a400c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="delphi">type
  TfrmExtra = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  protected
    procedure CreateParams(var Params : TCreateParams); override;
  end;

implementation

procedure TfrmExtra.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  Params.WndParent := 0;
end;</pre>
</div>
<p><span id="more-196"></span></p>
<p>CreateParms wird bei der Erzeugung des Fensters aufgerufen. Dabei wird dem Fensterstyle der Parameter WS_EX_APPWINDOW hinzugef&#252;gt. Dieser Parameter erzeugt den Taskbareintrag f&#252;r das entsprechende Fenster, sobald es sichtbar ist.</p>
<p>Nur diesen Parameter hinzuf&#252;gen reicht in den meisten F&#228;llen noch nicht, da dann zum Beispiel das Umschalten zwischen Haupt- und Sekund&#228;rfenster nicht wie gewohnt funktioniert. Die zweite Einschr&#228;nkung f&#228;llt beim minimieren des Hauptfensters auf &#8211; das sekund&#228;re Fenster wird einfach mit minimiert und zus&#228;tzlich dazu der Taskbareintrag entfernt. Das Problem entsteht, da das Fensterparent des zweiten Fensters immer noch das Hauptfenster ist.</p>
<p>Diese Problem l&#246;st man indem man das Parent der sekund&#228;ren Form null zuweist. Im oben gezeigten Code wird dies durch die Zeile Params.WndParent := 0 erreicht.</p>
<p>Jetzt funktioniert erst mal alles so, wie erwartet. Jedenfalls so lange man nicht ins Detail geht. Da gibt&#8217;s dann noch ein paar Stolpersteine <img src='http://blog.hitziger.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p><strong>Das Problem mit den Standarddialogen</strong></p>
<p>Ruft man einen Standarddialog, wie zum Beispiel Datei &#246;ffnen, aus der sekund&#228;ren Form auf, dann wird jedes Mal die Hauptform in den Vordergrund geholt. Nicht kritisch aber unsch&#246;n, aber daf&#252;r leicht zu l&#246;sen. Einfach den Aufruf des Standarddialog wie folgt &#228;ndern:</p>
<div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b1d659d9-c979-4b77-90c4-756502dae300" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre class="delphi" name="code">OpenDialog1.Execute(0);</pre>
</div>
<p>Dadurch wird das Parent des Dialogs auf null ge&#228;ndert. Ohne die Null in den Klammern ist das Parent immer noch die Mainform und dadurch wurde dieses in den Vordergrund holen des Mainforms hervorgerufen.</p>
<p>&nbsp;</p>
<p><strong>Das Problem mit den Hints</strong></p>
<p>Controls platziert auf der sekund&#228;ren Form mit aktivierten Hints, holen sp&#228;testens beim zweiten Aufpoppen des Hints wieder einmal die Mainform in den Vordergrund. Auch hier greift wieder das Problem mit dem Parent auf die Mainform. Um das Problem mit den Hints zu l&#246;sen muss man eine Klasse von THintWindow ableiten und den Parent wieder auf Null setzen. Ich habe dies im Projektquelltext umgesetzt. Das Resultat ist in den folgenden Zeilen zu sehen:</p>
<div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b181d9d4-2dfb-4b0f-8db5-606ff001dfb4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="delphi">program Project1;

uses
  Forms,
  Controls,
  Unit1 in 'Unit1.pas' {frmMain},
  Unit2 in 'Unit2.pas' {frmExtra};

{$R *.res}

type
  TFixedHintWindow = class(THintWindow)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

procedure TFixedHintWindow.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WndParent := 0;
end;

begin
  Application.Initialize;
  HintWindowClass := TFixedHintWindow;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.</pre>
</div>
<p>Bei mir l&#228;uft jetzt erst mal alles ohne Probleme.</p>
<p>Ach so, bevor ich es vergesse. Unter Delphi 2007 gibt es die neue Eigenschaft MainFormOnTaskBar unter TApplication. Eine gute Erkl&#228;rung dazu ist <a href="http://www.stevetrefethen.com/blog/TheNewVCLPropertyTApplicationMainFormOnTaskbarInDelphi2007.aspx" target="_blank">hier zu finden</a>. </p>
<p>Mit einer Aktivierung von MainFormOnTaskBar wird das neue Fenstermanagement in Delphi 2007 Anwendungen aktiviert und man kann sich die Zeile <em>Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; </em>sparen, da jedes Fenster der Anwendung mit einem auf Null gesetzten Parent eh schon extra in der Taskbar angezeigt wird. </p>


<p>Keine verwandten Einträge.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.hitziger.net/2008/05/27/mehr-taskbareintrge-in-einer-delphianwendung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TerragenForCondor updated!</title>
		<link>http://blog.hitziger.net/2008/04/23/terragenforcondor-updated/</link>
		<comments>http://blog.hitziger.net/2008/04/23/terragenforcondor-updated/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 15:53:35 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Meine Programme]]></category>

		<guid isPermaLink="false">http://blog.hitziger.net/2008/04/23/terragenforcondor-updated/</guid>
		<description><![CDATA[Mit Hilfe von Bj&#246;rn und Tom konnte ich noch zwei Bugs beseitigen, welche unter Vista zum Vorschein kamen. Der erste Bug war einfach noch eine falsche Ansteuerung eines Fensters in Terragen. Unter Vista hat sich bei jedem Terragenfenster ein Label vor den anderen gemogelt, so das der Index der von mir &#252;berpr&#252;ften Labels immer um [...]


Keine verwandten Einträge.]]></description>
			<content:encoded><![CDATA[<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 0px 0px; border-right-width: 0px" height="241" alt="program" src="http://blog.hitziger.net/stuff/pics/writer/TerragenForCondorupdated_FBD6/program.jpg" width="244" align="left" border="0"/> Mit Hilfe von Bj&#246;rn und Tom konnte ich noch zwei Bugs beseitigen, welche unter Vista zum Vorschein kamen. Der erste Bug war einfach noch eine falsche Ansteuerung eines Fensters in <a href="http://www.planetside.co.uk/terragen/" target="_blank">Terragen</a>. Unter Vista hat sich bei jedem Terragenfenster ein Label vor den anderen gemogelt, so das der Index der von mir &#252;berpr&#252;ften Labels immer um eins verschoben werden musste.</p>
<p>Der zweite Bug war da schon ein wenig kniffliger. Jedenfalls um ihm &#252;berhaupt erst einmal auf die Spur zu kommen. Tom und Bj&#246;rn hatten beide den Bug, dass beim Abspeichern des zweiten Tiles/Bildes, Terragen immer den ersten Dateinamen des ersten Tiles verwenden wollte. Das komische daran war, dass ich den Fehler bei mir nicht reproduzieren konnte. Laut Log wurde auch der neue Dateinamen in das Eingabefeld in Terragen &#252;bertragen. Irgendwie schien die History des Eingabefeldes sich quer zu stellen. Aber das war alles nur ein Raten ins Blaue hinein bis ich spa&#223;eshalber bei mir mal die Option <em>&#8220;Dateieindungen bekannter Dateitypen anzeigen&#8221;</em> im Windows Explorer deaktivierte. Siehe da, ich hatte den Fehler nun auch. Es war tats&#228;chlich so, dass nun beim Speichern des zweiten Bildes der Dateiname des ersten im Eingabefeld erschien. Ein blo&#223;es &#220;berschreiben mit WM_SETTEXT reichte nicht aus, um dem <em>&#8220;Standard &#8211; Vista &#8211; Speichern- Dialog&#8221;</em> zu verklickern, dass ich gern einen anderen Namen verwenden m&#246;chte.</p>
<p>Des R&#228;tsels L&#246;sung war einfach vor dem &#228;ndern des Dateinamens ein Tastendruck der L&#246;schen Taste im Eingabefeld des Speichern Dialoges mit WM_KEYDOWN und VK_DELETE zu simulieren.</p>
<p>Aber warum &#252;berhaupt ein Unterschied zwischen <em>&#8220;Dateieindungen bekannter Dateitypen anzeigen&#8221;</em> aktiviert und deaktiviert bei der History des Eingabefeldes gemacht wird, ist mir noch schleierhaft.</p>
<p>So genug gelabbert &#8230; <a href="http://software.hitziger.net/index.php?show=programs&amp;nr=14" target="_blank">hier gibt&#8217;s die neue Version 1.2.4.10 von TerragenForCondor</a>.</p>


<p>Keine verwandten Einträge.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.hitziger.net/2008/04/23/terragenforcondor-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Syntaxhighlighter Test</title>
		<link>http://blog.hitziger.net/2008/04/17/syntaxhighlighter-test/</link>
		<comments>http://blog.hitziger.net/2008/04/17/syntaxhighlighter-test/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 21:24:32 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://blog.hitziger.net/2008/04/17/syntaxhighlighter-test/</guid>
		<description><![CDATA[Ein kleiner Test des SyntaxHighlighter Plugins f&#252;r den Live Writer. Folgender C# Code sucht einen bestimmten laufenden Service/Dienst auf dem angegebenen Computer. Der Beispielcode sucht den Dienst RServer3 (Radmin) und stoppt ihn dann. static ServiceController FindService(string computerName, string serviceName) { ServiceController[] scServices; scServices = ServiceController.GetServices(computerName); ServiceController returnService = null; foreach (ServiceController scDummy in scServices) { [...]


Keine verwandten Einträge.]]></description>
			<content:encoded><![CDATA[<p>Ein kleiner Test des <a href="http://www.codeplex.com/wlwSyntaxHighlighter" target="_blank">SyntaxHighlighter Plugins</a> f&#252;r den Live Writer.</p>
<p>Folgender C# Code sucht einen bestimmten laufenden Service/Dienst auf dem angegebenen Computer. Der Beispielcode sucht den Dienst RServer3 (Radmin) und stoppt ihn dann.</p>
<div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8c0eb230-0450-481c-8d46-fe9c151e9985" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="c#:nogutter">        static ServiceController FindService(string computerName, string serviceName)
        {
            ServiceController[] scServices;
            scServices = ServiceController.GetServices(computerName);
            ServiceController returnService = null;
            foreach (ServiceController scDummy in scServices)
            {
                if (scDummy.Status == ServiceControllerStatus.Running)
                {
                    if (scDummy.ServiceName.ToLower() == serviceName.ToLower())
                    {
                        returnService = scDummy;
                        break;
                    }
                }
            }
            return returnService;
        }

       //Beispielaufruf
       ServiceController scSample = FindService(computerName, "RServer3");
       if (scSample != null)
       {
            scSample.Stop();
            scSample.WaitForStatus(ServiceControllerStatus.Stopped);
       }</pre>
</div>


<p>Keine verwandten Einträge.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.hitziger.net/2008/04/17/syntaxhighlighter-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
