AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Keine Aktivierung der Form bei Aufruf über Tastenkombination
Thema durchsuchen
Ansicht
Themen-Optionen

Keine Aktivierung der Form bei Aufruf über Tastenkombination

Ein Thema von pistazie · begonnen am 12. Nov 2003 · letzter Beitrag vom 4. Dez 2003
Antwort Antwort
Seite 1 von 3  1 23      
pistazie

Registriert seit: 12. Nov 2003
Ort: Augsburg
18 Beiträge
 
#1

Keine Aktivierung der Form bei Aufruf über Tastenkombination

  Alt 12. Nov 2003, 08:03
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

Könnte mir vielleicht jemand sagen, woran das liegt? Liegt es an meinem Windows98?
  Mit Zitat antworten Zitat
Benutzerbild von samson
samson

Registriert seit: 26. Aug 2003
Ort: Hövelhof Riege
105 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina

  Alt 12. Nov 2003, 09:17
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
Frank Gellermann
Wer Informationen hat, hat Macht. Wer Macht hat, hat Informationen!!!
  Mit Zitat antworten Zitat
pistazie

Registriert seit: 12. Nov 2003
Ort: Augsburg
18 Beiträge
 
#3

Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina

  Alt 12. Nov 2003, 09:22
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina

  Alt 12. Nov 2003, 10:40
Privates bitte via PN - hat im Thread nun echt nichts verloren

......

P.S.: Ich flirte auch gerne, aber
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
pistazie

Registriert seit: 12. Nov 2003
Ort: Augsburg
18 Beiträge
 
#5

Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina

  Alt 12. Nov 2003, 10:41
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
  Mit Zitat antworten Zitat
pistazie

Registriert seit: 12. Nov 2003
Ort: Augsburg
18 Beiträge
 
#6

Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina

  Alt 12. Nov 2003, 10:45
Ups tschuldigung, war keine Absicht
  Mit Zitat antworten Zitat
Benutzerbild von samson
samson

Registriert seit: 26. Aug 2003
Ort: Hövelhof Riege
105 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina

  Alt 12. Nov 2003, 12:20
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
Frank Gellermann
Wer Informationen hat, hat Macht. Wer Macht hat, hat Informationen!!!
  Mit Zitat antworten Zitat
pistazie

Registriert seit: 12. Nov 2003
Ort: Augsburg
18 Beiträge
 
#8

Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina

  Alt 12. Nov 2003, 12:27
Danke das ist lieb von dir

Weiß garnicht ob man die ganze Unit hier anhängen kann, ich probiers einfach
Angehängte Dateien
Dateityp: dfm unit1_199.dfm (1,6 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
pistazie

Registriert seit: 12. Nov 2003
Ort: Augsburg
18 Beiträge
 
#9

Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina

  Alt 12. Nov 2003, 12:31
ich glaube so ist es besser:

Delphi-Quellcode:
//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.
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von samson
samson

Registriert seit: 26. Aug 2003
Ort: Hövelhof Riege
105 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Keine Aktivierung der Form bei Aufruf über Tastenkombina

  Alt 12. Nov 2003, 13:03
Hallo,

So ich habs füge mal folgenden Code in deine Unit ein.

Typ für Hotkey:

Delphi-Quellcode:
type
  TWMHotkey = record
    Msg: Cardinal;
    idHotKey: Word;
    Modifiers: Integer;
    VirtKey: Integer;
  end;
Constante für den Key (zum aktivieren deiner Application);

Delphi-Quellcode:
const
  ID = $FF;
Tastenkürzel registrieren für diese Anwendung:
    procedure FormCreate(Sender: TObject); Neue Private procedure zum Bearbeiten des Shortcuts;
procedure WMHotKey(var Msg: TWMHotKey); Message WM_HOTKEY; Implementierung von FormCreate(...) und WMHotKey(...)
Delphi-Quellcode:
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;
In diesem Fall habe ich jetzt einen ganz komischen HotKey ausprobiert. Ich denke das Du bestimmt einen einfacheren findest.

Dein Code müsste ungefähr so aussehen:

Delphi-Quellcode:
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.
Gruss


Samson.
Frank Gellermann
Wer Informationen hat, hat Macht. Wer Macht hat, hat Informationen!!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 02: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