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/)
-   -   Konstante per ComboBox auswählen (https://www.delphipraxis.net/99889-konstante-per-combobox-auswaehlen.html)

krueemel 19. Sep 2007 08:57


Konstante per ComboBox auswählen
 
ich möchte, den PArameter
SC_MINIMIZE

in

Delphi-Quellcode:
PostMessage(GetWindowHandleByExeName(Edit1.Text), WM_SYSCOMMAND,SC_MINIMIZE,0);
gerne per Combobox steuern, sprich ich wähle in der Box aus zwischen Minimize, Close etc. Dies wird im label1.Caption gespeichert, nun geben ich folgendes ein:

Delphi-Quellcode:
PostMessage(GetWindowHandleByExeName(Edit1.Text), WM_SYSCOMMAND, Label1.Caption, 0);
Doch leider kommt folgende Fehlermeldung:
Code:
[Hinweis] Unit1.pas(61): Auf 'GetWindowHandleByExeName' zugewiesener Wert wird niemals benutzt
[Fehler] Unit1.pas(126): Inkompatible Typen: 'Integer' und 'TCaption'

Viele liebe grüße :)

DeddyH 19. Sep 2007 09:07

Re: Konstante per ComboBox auswählen
 
Du musst schon eine Abfrage dazwischenschalten:
Delphi-Quellcode:
var Flag: DWORD;
Flag := 0;
case ComboBox1.ItemIndex of
  0: Flag := SC_MINIMIZE;
  1: Flag := SC_MAXIMIZE;
  ...
end;
PostMessage(GetWindowHandleByExeName(Edit1.Text), WM_SYSCOMMAND,Flag,0);

krueemel 19. Sep 2007 09:58

Re: Konstante per ComboBox auswählen
 
okay, vielen Dank. Klappt super. :hello:

s-off 19. Sep 2007 10:15

Re: Konstante per ComboBox auswählen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

auch, wenn es in diesem speziellen Fall vielleicht etwas hoch gegriffen ist; Du könntest Deiner ComboBox auch Objekte zuweisen, anstelle nur der Bezeichnungen. In diesen Objekten könntest Du dann die Integer-Werte speichern, die sich hinter Deinen Konstanten (SC_MINIMIZE, SC_MAXIMIZE etc.) verbergen.

Hätte in diesem Deinem Beispiel aber nur einen Vorteil, und zwar den, dass Du Deine Case-Anweisung nicht überarbeiten müsstest, sollte sich die Reihenfolge Deiner Items irgendwann einmal ändern.

Beispielprojekt im Anhang.

krueemel 19. Sep 2007 10:22

Re: Konstante per ComboBox auswählen
 
Das ist zwar schön und gut, aber ich kann es leider nicht kompilieren.

Ich glaube ich habe eine zu alte Version, ich hab den Header/Uses "Variants" nicht.
Desweiteren ist der Bezeichner "AddItem" undefiniert.

Aber ich kann mir ungefähr vorstellen was du meinst, aber ich weiß nicht, wie ich es realisieren könnte.

Aber vielen Dank ;)
mfg

s-off 19. Sep 2007 10:28

Re: Konstante per ComboBox auswählen
 
Hab eine neue Version hochgeladen - ohne Variants.

Kannst es ja jetzt mal probieren - oder auch lassen ;) War eh nur nen kleines HowTo.

krueemel 19. Sep 2007 10:35

Re: Konstante per ComboBox auswählen
 
Zitat:

Zitat von s-off
Hab eine neue Version hochgeladen - ohne Variants.

Kannst es ja jetzt mal probieren - oder auch lassen ;) War eh nur nen kleines HowTo.

Ja ich würds mir echt gerne anschauen, aber den Bezeichner AddFile ist immer noch nicht definiert. Bei mir mach ich das eigentlich immer über Items.Add, aber wenn ich das änder sind dort zu viele Paramteter.

Tut mir leid, aber danke für deine Bemühungen, ich hätts gern angeschaut ;)

s-off 19. Sep 2007 10:42

Re: Konstante per ComboBox auswählen
 
Könntest es noch probieren, indem Du vor AddFile 'Self' davor schreibst, also so:
Delphi-Quellcode:
Procedure TMyComboBox.AddConstant(_sText: String; _iID: Integer);
Begin
   Constant := TConstantID.Create; //Eine Instanz unseres Objektes erzeugen
   Constant.iID := _iID; //Die ID-Eigenschaft unseres Objects füllen
   Self.AddItem(_sText, Constant); //Unserer Combobox dieses Object hinzufügen
End;
Zitat:

Bei mir mach ich das eigentlich immer über Items.Add
Das ist die Methode, mit der Du einfach einen String in die Items einfügst.
Mit AddItem fügst Du sowohl einen String ein, als auch ein Object.

Seltsam; welche Delphi-Version benutzt Du?

s-off 19. Sep 2007 11:01

Re: Konstante per ComboBox auswählen
 
Alternativ könntest Du auch folgendes machen - benutzt kein AddItem und ist nicht so oversized wie das erste Beispiel.

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
   ComboBox1.Items.AddObject('SC_MINIMIZE', TObject(61472));
   ComboBox1.Items.AddObject('SC_MAXIMIZE', TObject(61488));
End;

Procedure TForm1.ComboBox1Change(Sender: TObject);
Var
   int: Integer;
Begin
   int := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
   ShowMessage(inttostr(int));
End;

krueemel 19. Sep 2007 11:30

Re: Konstante per ComboBox auswählen
 
ah coole Sache, aber woher weiß ich die Nummer hinter TObject?!


Zitat:

ComboBox1.Items.AddObject('SC_MINIMIZE', TObject(61472));

Viele Grüße.. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 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