![]() |
Keine Aktivierung der Form bei Aufruf über Tastenkombination
Hi,
ich habe eine Applikation in Delphi programmiert, welche man über eine simple Tastenkombination aufrufen soll. Der Benutzer soll von einer anderen Anwendung Zeilen in die Zwischenablage kopieren und dann nur noch über die Tastenkombination meine Applikation aufrufen. Beim Aufruf wird in ein Memofeld das kopierte eingefügt und bearbeitet... Beim ersten Aufruf tut es schon, aber wenn der Benutzer mehrere Zeilen bearbeiten soll, soll die Applikation mehrmals über die Tastenkombination aufgerufen ohne jedes mal beendet zu werden, aber das Memofeld wird nicht aktualisiert, so wie es sein müsste. Aber wenn man die Anwendung ganz normal anklickt dann schon... Das ganze mache ich mit Windows-Botschaftbehandlung: mit SendMessage, also falls die Anwendung noch mal aufgerufen werden soll, sollen die Memofelder geleert und mit den aktuellen Daten der Zwischenablage gefüllt werden. Wie gesagt über Mausklick klappt das hervorragend, aber nicht über einen Aufruf mit Tastenkombination :wall: Könnte mir vielleicht jemand sagen, woran das liegt? Liegt es an meinem Windows98? |
Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina
Hallo.
Ich stelle mir die Frage, über welche API-Funktionen du versuchst Deine Delphi-Application zu aktivieren. Verwendest Du nur SendMessage() oder auch BringToFront und oder SetFocus usw... Gruss Samson |
Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina
Ich mache das mit SendMessage, welche ich in die Initalisierung vom Mutex eingebaut habe...
Es klappt ja eingentlich auch aber dafür muss man die Anwendung auf dem Desktop anklicken. Es ist die blöde Tastenkombination : STRG + ALT + T |
Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina
Privates bitte via PN - hat im Thread nun echt nichts verloren :warn:
...:cat:... P.S.: Ich flirte auch gerne, aber :mrgreen: |
Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina
Nein ich hab das Problem noch nicht gelöst, habe auch kaum Zeit dafür :(
Du hast mir garnicht geschrieben woher du kommst, brauch ein wenig Input, damit ich entscheide, ob ich mit dir Kaffee trinken gehe :roll: |
Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina
Ups tschuldigung, war keine Absicht :oops:
|
Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina
Hallo pistazie.
Abgesehen von Deiner Flirtaffäre versuche ich eine Lösung zu finden. Wie wäre es, wenn Du deine Application hierdran hängst, damit wir es uns mal angucken können und uns eine besser Vorstellung zur Application machen können. Gruss Samson |
Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina
Liste der Anhänge anzeigen (Anzahl: 1)
Danke das ist lieb von dir :)
Weiß garnicht ob man die ganze Unit hier anhängen kann, ich probiers einfach :gruebel: |
Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina
ich glaube so ist es besser:
Delphi-Quellcode:
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
//Nachricht mit Keycode 0 wird von Anwendung empfangen://
procedure TForm1.WMTimeChange(var Message: TMessage); var Result, Gesamthex, Hexawert, Hinten, Vorne, Ausgabe : String; begin if Chr(Message.WParam) = #0 then begin MemoEingabe.Text := ''; MemoAusgabe.Text := ''; Formfuellen(Result,Gesamthex,Hexawert,Vorne,Hinten,Ausgabe); end else inherited; end; //############################################################################## //Stand: 17.10.2003 //Autor: //Beschr:Wandelt den Hexadezimalen Wert in den entsprechenden dezimalen Ascii-Code und // diesen in das entsprechende Ascii-Zeichen //Version: 1.1 //Global: - //Input: Gesamthex,Hexawert //Output: //Result: //Exception: function TForm1.HexToAsciiToZeichen(Gesamthex,Hexawert : String) : String; var Asciicode, Gesamtwort : String; AsciiInt,PosLeer, PosD, PosA : Integer; Buchstabe : String; begin Gesamthex := MemoEingabe.Text; Gesamtwort := ''; repeat PosLeer := Pos(' ', Gesamthex); if (PosLeer > 0) then begin Delete(Gesamthex,PosLeer,1); end; PosD := Pos(#$D, Gesamthex); if (PosD > 0) then begin Delete(Gesamthex,PosD,1); end; PosA := Pos(#$A, Gesamthex); if (PosA > 0) then begin Delete(Gesamthex,PosA,1); end; until (PosLeer = 0); repeat //Aus dem gesamten String(Gesamthex) sollen in 2er-Zeichen(Hexawert) Teilstrings extrahiert werden: Hexawert := Copy(Gesamthex, 1, 2); if copy(Hexawert,2,2) <> '' then begin //Umwandeln Hexadez zu Asciicode(Dez): Asciicode := IntToStr(StrToInt('$' + Hexawert)); AsciiInt := StrToInt(Asciicode); if (AsciiInt >= 32) then begin //Umwandeln Asciicode zu Asciizeichen: Buchstabe := Chr(AsciiInt); end else begin Buchstabe := ' '; end; Gesamtwort := Gesamtwort + Buchstabe; Delete(Gesamthex, 1, 2); Result := Gesamtwort; end until (Gesamthex = ''); end; //Form mit Inhalt:// procedure TForm1.Formfuellen(Result,Gesamthex,Hexawert,Vorne,Hinten : String; var Ausgabe : String); var Stringlaenge,PosSeparator : Integer; begin MemoEingabe.PasteFromClipboard; Result := HexToAsciiToZeichen(Gesamthex,Hexawert); Stringlaenge := Length(Result); repeat PosSeparator := Pos('/', Result); if (PosSeparator > 0) then begin Vorne := copy(Result,1,PosSeparator-1); Hinten := copy(Result,PosSeparator+1,Stringlaenge); Delete(Result, PosSeparator,1); Result := Hinten; Ausgabe := Vorne + #13#10 + Hinten; Result := Ausgabe; end; until (PosSeparator = 0); MemoAusgabe.Text := Result; end; //Gesamtablauf:// procedure TForm1.FormActivate(Sender: TObject); var Result, Gesamthex, Hexawert, Hinten, Vorne, Ausgabe : String; begin MemoEingabe.Text := ''; MemoAusgabe.Text := ''; Formfuellen(Result,Gesamthex,Hexawert,Vorne,Hinten,Ausgabe); // ShowMessage('Hallo'); end; //Mehrfachstart verhindern:// var mHandle: THandle; ustrProgName : String; Initialization begin //ShowMessage(Application.ExeName); ustrProgName := 'Terminal.exe' + #0; //ustrProgName := Application.ExeName + #0; mHandle := CreateMutex(nil,True,@ustrProgName[1]); if GetLastError = ERROR_ALREADY_EXISTS then begin //Nachricht versenden Keycode 0: SendMessage(HWND_BROADCAST, WM_TIMECHANGE, 0, 0); //Anwendung läuft bereits: //showMessage('Anwendung läuft bereits!'); //Beendet Anwendung: Halt; end; end; Finalization begin if mHandle <> 0 then CloseHandle(mHandle); end; end. |
Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina
Hallo,
So ich habs füge mal folgenden Code in deine Unit ein. Typ für Hotkey:
Delphi-Quellcode:
Constante für den Key (zum aktivieren deiner Application);
type
TWMHotkey = record Msg: Cardinal; idHotKey: Word; Modifiers: Integer; VirtKey: Integer; end;
Delphi-Quellcode:
Tastenkürzel registrieren für diese Anwendung:
const
ID = $FF;
Delphi-Quellcode:
Neue Private procedure zum Bearbeiten des Shortcuts;
procedure FormCreate(Sender: TObject);
Delphi-Quellcode:
Implementierung von FormCreate(...) und WMHotKey(...)
procedure WMHotKey(var Msg: TWMHotKey); Message WM_HOTKEY;
Delphi-Quellcode:
In diesem Fall habe ich jetzt einen ganz komischen HotKey ausprobiert. Ich denke das Du bestimmt einen einfacheren findest.
procedure TForm1.FormCreate(Sender: TObject);
var bolOK: longbool; begin bolOK:=RegisterHotKey(self.Handle, ID, MOD_Alt+MOD_CONTROL+MOD_SHIFT, vk_escape);//Ord('Q') end; procedure TForm1.WMHotKey(Var Msg: TWMHotkey); begin case Msg.IdHotKey of ID: begin Application.BringToFront; Windows.SetFocus(self.Handle); end; ID+1: caption:='es ist immer noch alles klar'; // Abhängig von der ID wird entschieden, was getan werden soll. end; inherited; end; Dein Code müsste ungefähr so aussehen:
Delphi-Quellcode:
Gruss
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TWMHotkey = record Msg: Cardinal; idHotKey: Word; Modifiers: Integer; VirtKey: Integer; end; const ID = $FF; type TForm1 = class(TForm) GroupBox3: TGroupBox; Memo1: TMemo; BitBtn2: TBitBtn; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } procedure WMHotKey(var Msg: TWMHotKey); Message WM_HOTKEY; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var bolOK: longbool; begin bolOK:=RegisterHotKey(self.Handle, ID, MOD_Alt+MOD_CONTROL+MOD_SHIFT, vk_escape);//Ord('Q') end; procedure TForm1.WMHotKey(Var Msg: TWMHotkey); begin case Msg.IdHotKey of ID: begin Application.BringToFront; Windows.SetFocus(self.Handle); end; ID+1: caption:='es ist immer noch alles klar'; // Abhängig von der ID wird entschieden, was getan werden soll. end; inherited; end; end. Samson. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz